FOOの後に各「単語」(スペースが境界)をそれぞれ取得したいと思います
FOO foo bar foo.bar
nb FOOの前にスペースがあるかもしれません
とpreg_match_all()
:
/(?:.*FOO | )([^ ]+)/
戻り値:
Array
(
[0] => ...
[1] => Array
(
[0] => foo
[1] => bar
[2] => foo.bar
)
)
FOO (([\w\.]+) ?)+
内側の括弧は、各「単語」と一致する必要があります。「単語」に他の特殊記号を含めることができる場合は、それらをリストに追加する必要があります[\w\.]
。
これを試すことができます:
preg_match_all('~(?:^(?>[^F]++|F(?!OO\h))*+FOO\h++|\h++)\K\H++~', $str, $matches);
print_r($matches);
これは preg_match() と destroy() を使った簡単な方法です。
$string = "blah blah FOO foo bar foo.bar";
preg_match("#.*FOO +(.+ ?)+#ms",$string,$m);
$words = explode(" ",$m[1]);
print_r($words);
Array
(
[0] => foo
[1] => bar
[2] => foo.bar
)
これを試すことができます:
$str = 'FOO foo bar foo.bar';
$words = explode(' ',preg_replace('/^(( *)FOO( *))/', '', $str));
これで、「foo」、「bar」、「foo.bar」の 3 つの要素を持つ配列 ($words) ができました。私が理解したと思います!