正则表达式 - 在特定字符串后抓取每个单词

时间:2013-10-22 15:28:33

标签: php regex

我想在FOO

之后抓住每个“字”(空间是边界)
   FOO foo bar foo.bar

n.b。 FOO之前可能有空格

6 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

你可以试试这个:

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

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

答案 2 :(得分: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
)

答案 3 :(得分:0)

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

$string = '     FOO foo bar foo.bar';
$everything_after_FOO = explode(' ', substr(trim($string), 4));

答案 4 :(得分:0)

使用preg_match_all()

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

返回:

Array
(
    [0] => ...
    [1] => Array
    (
        [0] => foo
        [1] => bar
        [2] => foo.bar
    )
)

答案 5 :(得分:0)

你可以试试这个:

preg_match_all('~(?:^(?>[^F]++|F(?!OO\h))*+FOO\h++|\h++)\K\H++~', $str, $matches);
print_r($matches);