2017-01-07 20 views
0

私はRegExに基づいて機能のいくつかをしようとしてきたとRegExpatternのいくつかは、ユーザ入力されたとして、それらのほとんどは\Q\Eを使用しています。リテラル区切り文字( Q Eブロック内の区切り文字)

だから、我々はdelimiter/を使用し、機能が/\Q/\E/のラインの中で何かを構築するだろう/に対してそれを一致させたいしている仮説としましょう。

/\Q/\E//と一致しない理由はわかりませんが、inputと同じ区切り文字を使用しない限り、それ以外の区切り文字は同じです。

おそらく、区切り文字はリテラルのみのブロックであり、リテラルとしてのエスケープであっても、終わりとみなされます。わからない、束をしよう。

うまくいけば、誰かがこの問題の回避策について正しい方向に私を押してくれることを願ってください。

+0

「\ Q」と「\ E」を使用せずに、別の区切り文字を使用したり、単に「/」をエスケープするものはありませんか? –

+0

@SebastianProske別の区切り文字を使用すると、他のデリミタを使用することもできます。また、 '\ Q'と' \ E'を使用しないことはこの場合のセキュリティ上の問題です。 TL:DR - はい、実際にはいくつかのことがあります。 – KaekeaSchmear

+0

@SebastianProske Err、それは密であった。私はpreg_quoteが引用符だけをバックスラッシュしたと思った。申し訳ありません&ありがとう! – KaekeaSchmear

答えて

0

/は、*または(のような正規表現のメタキャラクターではないことがわかります。これは、正規表現自体を区切るために使用しているため、正規表現区切り文字をエスケープする唯一の方法はバックスラッシュ(\/)です。

ただし、\Q\Eを使用する必要はありません。 preg_quote()メソッドはdelimiter引数を取るので、バックスラッシュが必要な場所に正しく追加されます。

+0

私はそれを認識しています。しかし、 'regex'文字をそのように解釈したくないので、実際には' \ Q'と '\ E'を使う必要があります。すべての入力はリテラルでなければなりません。 – KaekeaSchmear

+0

@Removedしたがって、ユーザーが挿入した '\ E'はどのように扱いますか? 'preg_quote'は何をしていますか? –

+0

@SebastianProske 'なぜ'のイラストでポストが更新されました – KaekeaSchmear

関連する問題