我正在尝试匹配此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