0

我想在 FOO 之后抓住每个“单词”(空格是边界)

   FOO foo bar foo.bar

nb FOO 前可能有空格

4

6 回答 6

0

这是使用 preg_match() 和 explode() 的简单方法。

$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
)
于 2013-10-22T15:38:02.377 回答
0

FOO (([\w\.]+) ?)+

内括号应匹配每个“单词”。如果“单词”可以包含任何其他特殊符号,则需要将它们添加到列表中[\w\.]

于 2013-10-22T15:37:08.013 回答
0

你可以试试这个:

$str = 'FOO foo bar foo.bar';
$words = explode(' ',preg_replace('/^(( *)FOO( *))/', '', $str));

现在,您有一个包含 3 个元素的数组 ($words):“foo”、“bar”和“foo.bar”。我希望我明白!

于 2013-10-22T15:37:27.007 回答
0

您也可以尝试这样的事情,假设 FOO 在字符串的开头始终是 4 个字符(包括空格)。

$string = '     FOO foo bar foo.bar';
$everything_after_FOO = explode(' ', substr(trim($string), 4));
于 2013-10-22T15:48:09.983 回答
0

你可以试试这个:

preg_match_all('~(?:^(?>[^F]++|F(?!OO\h))*+FOO\h++|\h++)\K\H++~', $str, $matches);
print_r($matches);
于 2013-10-22T16:17:50.430 回答
0

preg_match_all()

/(?:.*FOO | )([^ ]+)/

返回:

Array
(
    [0] => ...
    [1] => Array
    (
        [0] => foo
        [1] => bar
        [2] => foo.bar
    )
)
于 2013-10-22T16:02:40.687 回答