2

我正在尝试匹配这个正则表达式

/((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上的比较没有列出任何重要的差异。

因此,我在这里。

4

1 回答 1

0

没关系,毕竟我是愚蠢的。

我的 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"

其中没有换行符,并且正则表达式不匹配。掌心。

我想我以前从来没有注意到它,因为我用 HTML 代码做多行引号,这对换行符真的不敏感。

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

于 2013-06-25T14:28:09.623 回答