PHP vs JavaScript Regex


PHP vs JavaScript Regex

我正在尝试匹配此regex

/((TOSS-UP|BONUS)'n+([^'n]+)'n+ANSWER:([^'n]+))/

到这个数据

TOSS-UP
? ipsum dolor sit amet
ANSWER: lorem
BONUS
when in the course of ? events
ANSWER: human

我使用RegexPal之类的东西来制作正则表达式,所以我首先用在JavaScript中测试了它

({regex}).exec({data});

如预期的那样,返回

[
"TOSS-UP'n? ipsum dolor sit amet'nANSWER: lorem",
"TOSS-UP'n? ipsum dolor sit amet'nANSWER: lorem",
"TOSS-UP",
"? ipsum dolor sit amet",
" lorem"
]

但是在PHP中,使用进行测试

preg_match_all("{regex}","{data}",$arr);
var_dump($arr);

不返回匹配项和一个空数组。

PHP风格的正则表达式和JS正则表达式之间可能有一些区别(除非我在做一些非常愚蠢的事情,这是我众所周知的)。由于我只知道JS风格的正则表达式,我不知道该怎么办。

我试着查了一下,但官方文件极其复杂,毫无帮助http://www.regular-expressions.info/refflavors.html没有列出任何重要的差异。

因此,我在这里。

没关系,毕竟我很笨。

我的PHP代码是

preg_match_all("{regex}","TOSS-UP
? ipsum dolor sit amet
ANSWER: lorem
BONUS
when in the course of ? events
ANSWER: human",$arr);

中间的字符串显然评估为类似的东西

"TOSS-UP ? ipsum dolor sit amet ANSWER: lorem BONUS when in the course of ? events ANSWER: human"

它没有换行符,正则表达式也不匹配。Facepalm。

我想我以前从未注意到这一点,因为我用HTML代码进行多行引号,这对换行符真的不敏感。

让这成为对所有人的警告!:D