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 に答える