私の正規表現:PHPの正規表現値
/^(\p{L}+)(?:\.(\p{L}+))*$/
と件名:それは返しapp
とdb
に一致する
app.config.db
。なぜこのスクリプトはconfig
を省略しますか?このため、一部の
私の正規表現:PHPの正規表現値
/^(\p{L}+)(?:\.(\p{L}+))*$/
と件名:それは返しapp
とdb
に一致する
app.config.db
。なぜこのスクリプトはconfig
を省略しますか?このため、一部の
:
(?:\.(\p{L}+))*
あなたしか最後キャプチャをキャプチャしますキャプチャグループを、繰り返しています。あなたはpreg_match_all()
を見てみるとよいでしょう。これは(異なる正規表現で)すべての一致を返すことができます。
例:
$input = 'app.config.db';
$regex = '/\.?(\p{L}+)/';
preg_match_all($regex, $input, $matches);
print_r($matches[1]);
出力:
Array
(
[0] => app
[1] => config
[2] => db
)
あなたの正規表現は、2つのキャプチャグループが含まれているので、それは2つの文字列をキャプチャします。最初のグループ(^(\p{L}+)
)は、文字列の先頭にあるので、app
をキャプチャします。
第2のグループは、当初config
をキャプチャします。しかし、それは*
内側にネストていますので、それは繰り返されるとdb
をキャプチャします。一般的に、結果は、任意のグループによって捕捉最後ストリングであろう。
正規表現を投げてhttps://www.regex101.comに入力してください – Rizier123
私は忘れてしまいました;)https://regex101.com/r/jI7cW4/1 – Mati