0

わかりましたので、作成したこの正規表現があり、RegexBuddyでは正常に機能しますが、phpにロードすると機能しません。以下はその一例です。

RegexBuddy を使用すると、次のように動作するようになります。

\[code\](.*)\[/code\]

ドットが改行に一致することを確認し、大文字と小文字を区別しないようにしましたが、そのようにも機能します。

これがphpです:

$q = "[code]<div>html code to display on screen</div>[/code]";

$pattern = '/\[code\](.*)\[/code\]/si';

$m = preg_match($pattern, $q, $code);

[code][/code] を使用していることがわかります。これを抽出したら、htmlentities() を実行して、html コードをレンダリングする代わりに表示します。

4

5 に答える 5

2

正規表現をRegexBuddyからPHPに転送する場合は、[使用]タブでソースコードスニペットを生成するか、上部のツールバーの[コピー]ボタンをクリックして、PHPpreg文字列としてコピーすることを選択します。次に、RegexBuddyは、何もエスケープせずに、PHPが必要とする区切り文字とフラグを自動的に追加します。

于 2009-01-27T14:37:40.927 に答える
2

パターン (/コード) の途中にスラッシュを含めています。それをエスケープするか、パターンを別のもので区切ってください(私は好きです!)。

于 2009-01-27T04:50:16.073 に答える
1

クロージングマーカーを逃がさなかったからです/

バックスラッシュをエスケープしても、害はありません。

$pattern = "/\\[code\\](.*)\\[\\/code\\]/si";

PHPでは、正規表現の区切り文字として任意の文字を選択できるため、正規表現でも使用されていない文字をよく使用します@

$pattern = "@\\[code\\](.*)\\[/code\\]@si";
于 2009-01-27T04:52:21.280 に答える
0

これはうまくいきました:

$pattern = '/\[code\](.*)\[\/code\]/si';
于 2009-01-27T05:20:22.767 に答える
-1

/codeのスラッシュをエスケープする必要があります

$pattern = '/\[code\](.*)\[\/code\]/si';

また、一致は$mではなく$codeに保存されていることを認識してください

編集:それに殴られた:p

于 2009-01-27T04:55:27.573 に答える