2017-08-13 26 views
1

どの文字列にもマッチする正規表現を見つけようとしていました!そして、いくつかの検索の後に私はほとんどすべての答えがhereまたは.*が言ったようにhere空の正規表現は任意の文字列に一致します

が言ったように[\s\S]は、任意の文字列にマッチします。しかしPHP preg_matchでビットを再生しながら、私は空の正規表現は、任意の文字列に一致していることを見つけたことを述べていました!

if(preg_match("//u", "")) echo "empty string matchs\n"; 
else echo "empty string does not match\n"; 

if(preg_match("//u", "abc")) echo "abc matchs\n"; 
else echo "abc does not match\n"; 

if(preg_match("//u", "\n")) echo "new line matchs\n"; 
else echo "new line does not match\n"; 

if(preg_match("//u", "/")) echo "/ matchs\n"; 
else echo "/ does not match\n"; 

exit; 

この意志出力

empty string matchs 
abc matchs 
new line matchs 
/matchs 

ライブデモ(https://eval.in/845001

は、私が何かを一致させるために、安全に、この空の正規表現を使用することはできますか?空の正規表現はどういう意味ですか?

私は何もマッチする正規表現を必要とする理由を求めているならば、私はそれの文字列の検証機能の一部として正規表現のパラメータを必要とする関数を使用していると私はそれが何かを受け入れるようにしたいので、それはです。

+0

何の文字列と一致しないために正規表現は一切正規表現ではありません。 'if($ string ==" ")'または 'if(strlen($ string)== 0)' – Ibu

+0

@Ibuありがとうございます。しかし、文字列を検証する関数に正規表現を渡す必要があります。 –

+0

あなたの最初の条件は、文字列が最初に空であるかどうかを確認してから、正規表現に入ります。 – Ibu

答えて

2

空の正規表現パターン//は、文字列の先頭、末尾、および任意の位置に一致します。ただ、空のパターンを使用して問題ないはずですが、最初に一致かどうかを確認するでしょう

Array[0] => [1] => [2] => [3] =>)

preg_match通り:4本の空のマッチを返すeval.in preg_match_all('//', "foo", $out);でこのデモを参照してください。しかし、私はたぶん/^/を好むでしょうが、の文字列にはすべての文字列に含まれる文字列があります。

[\s\S](空白のためshorts一緒character class中の非空白文字とは)ちょうど任意の文字を意味し、通常the dotマッチ改行を行うために利用可能なフラグがない場合も改行と一致するline-break related使用されます。 JS regex which does not support s flagとよく使用されます。同様に[\D\d](数字と数字以外の数字)、[\w\W](単語文字と非単語文字)があります。また、JS regexでは[^]は "何もない"の空白文字クラスを否定することもできます。

/[\s\S]/を使用するか、または量限定記号なしで他の文字列を使用するには、少なくとも1文字必要です。

あなたのパターンでは、ユニコード正規表現にuフラグを使用することを言及してください。おそらく、このフラグを空のパターンと一緒に使用するか、文字列の開始をチェックするだけの理由はありません。 pcre unicode regexに興味があるのは、以下のエスケープシーケンスかもしれません。

  • \Xは、ユニコード書体に一致します。 u-modeの点に似ています(改行ではありません)。
  • \Cは、1つのデータユニット(ユニコード入力の場合はsimilar using the dot without u flag)と一致します。まあ

、私は本当に1は、任意の文字列にマッチするパターンを必要とする理由を知るが、関心のために書いていない:)

1

はい、あなたは正しいです。もう1つの選択肢は/.?/です。すべての文字列を受け入れる方法は多数あります。

+0

ありがとうございます。だから、この空の正規表現はどんな文字列にもマッチするために安全に使えますか?それはどういう意味ですか? **空の文字列にマッチするとは思わないのですか?**? –

関連する問題