特定の文字が最初に出現するまでのすべてに一致するパターンを探しています。- セミコロン。
私はこれを書いた:
/^(.*);/
ただし、実際には、セミコロンが最後に出現するまでのすべて(セミコロンを含む)に一致します。
\w+(?!([^]+;)|;)
しかしこれはなぜですか?.+(?!([^]+;)|;)
特定の文字が最初に出現するまでのすべてに一致するパターンを探しています。- セミコロン。
私はこれを書いた:
/^(.*);/
ただし、実際には、セミコロンが最後に出現するまでのすべて(セミコロンを含む)に一致します。
\w+(?!([^]+;)|;)
しかしこれはなぜですか?.+(?!([^]+;)|;)
回答:
あなたは必要です
/[^;]*/
[^;]
ある文字クラスは、すべてのものが、セミコロンと一致しました。
perlre
マンページを引用するには:
文字のリストを[]で囲むことにより、文字クラスを指定できます。これは、リストの任意の文字と一致します。「[」の後の最初の文字が「^」の場合、クラスはリストにない任意の文字と一致します。
これはほとんどの正規表現方言で機能するはずです。
foo=bar;baz=bax;bab=baf
、必要なものbab=baf
がまったくない場合でも一致しました;
。スペックにターゲットシンボル以外のすべてと一致する場合、なぜ機能するか
か
/^(.*?);/
作業?
?
怠惰なオペレータ、マッチングの前にできるだけ少しように正規表現グラブです;
。
/^[^;]*/
[^;]は、セミコロン以外のすべてに一致します。角かっこは、セットマッチング演算子です。基本的には、この文字セットの任意の文字と一致します。^
最初にを付けると逆の一致になるため、このセットにないものと一致します。
サンプルテキスト:
"this is a test sentence; to prove this regex; that is g;iven below"
たとえば、上記のサンプルテキストがある場合、正規表現/(.*?\;)/
は;
、セミコロンを含む最初のセミコロン()までのすべてを提供します。"this is a test sentence;"
;
正規表現の特殊文字ではないため、char をエスケープする必要はありません。グループ化()
も必要ありません。あなたは一緒に行くことができます/.*?;/
?
文字は一致を遅延させます(可能な限り数回一致します)。最初のセミコロンまでの正規表現に一致する文字について考えてみてください。
これは正規表現による解決策ではありませんが、問題を説明するのに十分簡単なものです。文字列を分割して、配列から最初の項目を取得するだけです。
$str = "match everything until first ; blah ; blah end ";
$s = explode(";",$str,2);
print $s[0];
出力
$ php test.php
match everything until first
属性を含むxmlタグ内のすべての文字を一致させる方法を見つけようとしていたので、これは私にとって非常に役に立ちました。私は「すべてを最後まで一致させる」問題に遭遇していました:
/<simpleChoice.*>/
しかし、次の方法で問題を解決できました:
/<simpleChoice[^>]*>/
この投稿を読んだ後。皆さんありがとう。
<!DOCTYPE>
タグに構文エラーがあるxmlドキュメントを修正しました。パーサーはそれを処理することができなかったので。
/^(.*?);/
動作するはずですが(それはnon-greedyと呼ばれます)、指定された答えを使用した[^;]*
方が優れています。