Regex捕获组PHP的问题


Regex issue with capturing group PHP

我四处寻找了一段时间,一直找不到我要找的东西,或者我只是知道得不够,不知道我在找什么。。。

我有一种情况,我想捕捉并用括号表示,括号是一个长度在1到5个字符之间的字母字符。这并不难。接下来,我想从搜索中排除确切的字符串(AP)。

我使用的是regex101,我似乎在想要获取的字符串(或它前面的空格)上得到了匹配,但匹配只返回",而不是我想要的完整字符串(EXC)。这是我目前拥有的正则表达式:

/((?='('D{1,5}')))(?:.(?!AP))/gism

任何正确方向的建议或指示;如有必要,我将提供更多信息。

以下是您第一次使用的正则表达式和有效的正则表达式(添加空格)的比较:

/((?= '('D{1,5}') )) (?:  .(?!AP ))/gism
/((     'D{1,5}   )) (?<!  (  AP ))/gism

当左括号位于非以ap开头的非数字内容周围时,第一个模式将与左括号匹配。环视与字符不匹配,请记住。(圆点是唯一没有出现在周围的字符。)

另一种模式删除文字括号:'(')。它还删除了前瞻?=,这样您就可以实际捕获一些东西。正则表达式的最后一部分是否定的。在这种情况下,它所做的就是当模式匹配的东西在ap中结束时,阻止模式匹配p

然而,我无法解释为什么第二种模式有这么多不必要的括号。这相当于:

/('D{1,5})(?<!AP)/gism