0

コード


(preg_match_all("#\[level-(.+)-\](.+?)\[/level\]#", $string, $matches)

問題


Enter で値を代入する$stringと、正規表現が機能しません。

例:

//This doesn't work
$string = '[level-0-]This is a 
test[/level]';
//This works
$string = '[level-0-]This is a test[/level]';

私が欲しいもの


間の文字(入力など)に関係なく、正規表現が機能するようにしたいと思います。

誰かがこれで私を助けてくれたらうれしいです。私はまだ正規表現を掘り下げていないので、あまり得意ではありません:(

4

5 に答える 5

6

正規表現にDOTALLフラグが必要なだけです/s。これにより、ドット.は改行を含む任意の文字に一致します (デフォルトではそうではありません)。

preg_match_all("#\[level-(.+)-\](.+?)\[/level\]#s", ....

PCRE フラグ リストhttp://php.net/manual/en/reference.pcre.pattern.modifiers.phpも参照してください。

于 2011-09-28T11:44:03.330 に答える
2

パターンに /s フラグを追加して、正規表現が入力を 1 行として扱うようにする必要があるでしょう。

于 2011-09-28T11:44:32.987 に答える
1

sパターン修飾子を使用:

この修飾子が設定されている場合、パターン内のドット メタ文字は、改行を含むすべての文字に一致します。それがない場合、改行は除外されます。(参照:正規表現パターンで可能な修飾子)

于 2011-09-28T11:48:04.443 に答える
0

これはうまくいくはずです:

(preg_match_all("#\[level-(.+)-\](.+?)(\b)*(.+?)*\[/level\]#", $string, $matches)
于 2011-09-28T11:45:24.407 に答える
0

"Test[.|\n]is[.|\n]a[.|\n]test"これはうまくいくかもしれません

于 2011-09-28T11:49:05.777 に答える