【问题标题】:RegEx pattern to match a string between two characters, but exclude the characters正则表达式模式匹配两个字符之间的字符串,但排除字符
【发布时间】:2011-04-03 21:31:24
【问题描述】:

大家好,

我还有一个正则表达式问题。我已经进行了数小时的搜索,但显然我错过了我需要的一篇关键文章。

我需要在 PHP 中使用 preg_match() 来匹配括号之间的字符串,但括号不会出现在结果中。我见过类似问题的例子,但我相信我的问题是不同的,因为它实际上是我正在处理的括号,它是 RegEx 中的元字符。有什么好处吗?

无论如何...

字符串是:

     "200 result=1 (SIP/100-00000033)"

当前代码是:

preg_match("/\((.*)\)/s", $res, $matches);

$matches[0] 变为:

     "(SIP/100-00000033)"

我想要的是:

     "SIP/100-00000033"

我很抱歉,因为我确信这很简单,但我只是没有掌握它。有人愿意教育我吗?

提前谢谢你!!

【问题讨论】:

  • 你告诉我你没有检查$matches的内容!?
  • @Nick:我明白你为什么向我扔一块“愚蠢”的石头。我没有指定我是通过 Asterisk 使用这个脚本,它不允许使用“var_dump”——诚然,我可以使用其他机制来检查数组的内容,但我根本没有想到。但我们都必须从经验中学习。因此,感谢您的洞察力。

标签: php regex


【解决方案1】:

嗯,这都是指您在正则表达式中对项目进行分组的方式。您的解决方案实际上是正确的,您只是使用了错误的匹配索引。试试:

$matches[1]

如果以某种方式出现错误,请发布它们,我们会修复。

【讨论】:

  • 解决了,谢谢。我知道这会很简单。
【解决方案2】:

如果你真的希望完全匹配排除括号,你可以使用look-ahead和look-behind assertions

preg_match('/(?<=\().*(?=\))/s', $res, $matches);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多