在preg与PHP匹配后获取下一个单词

时间:2014-06-15 03:50:47

标签: php preg-match

如何在使用PHP进行pregmatch之后获得下一个单词。

例如,如果我有这样的字符串:

"This is a string, keyword next, some more text. keyword next-word."

我想使用preg_match来获取“关键字”之后的下一个字词,包括该字是否连字符。

所以在上面的例子中,我想要返回“next”和“next-word”

我试过了:

$string = "This is a string, keyword next, some more text. keyword next-word.";

$keywords = preg_split("/(?<=\keyword\s)(\w+)/", $string);
print_r($keywords);

它只返回所有内容,但似乎根本不起作用。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:7)

使用您的示例,这应该可以使用preg_match_all

// Set the test string.
$string = "This is a string, keyword next, some more text. keyword next-word. keyword another_word. Okay, keyword do-rae-mi-fa_so_la.";

// Set the regex.
$regex = '/(?<=\bkeyword\s)(?:[\w-]+)/is';

// Run the regex with preg_match_all.
preg_match_all($regex, $string, $matches);

// Dump the resulst for testing.
echo '<pre>';
print_r($matches);
echo '</pre>';

我得到的结果是:

Array
(
    [0] => Array
        (
            [0] => next
            [1] => next-word
            [2] => another_word
            [3] => do-rae-mi-fa_so_la
        )

)

答案 1 :(得分:0)

正面看是你正在寻找的东西:

(?<=\bkeyword\s)([a-zA-Z-]+)

应该与preg_match完美配合。使用g修饰符捕获所有匹配项。

Demo

参考问题:How to match the first word after an expression with regex?

答案 2 :(得分:0)

尽管正则表达式功能强大,但对于我们大多数人来说,它也很难调试和记忆。

在这种情况下,在...匹配之后获取下一个单词,这是一种非常常见的字符串操作。

简单地,通过将​​字符串分解为数组,然后搜索索引。这很有用,因为我们可以指定前进或后退的单词数。

此匹配项首次出现+ 1 word

<?php
$string = explode(" ","This is a string, keyword next, some more text. keyword next-word.");
echo $string[array_search("keyword",$string) + 1];
/* OUTPUT next, *

Run it online

通过反转数组,我们可以捕获最后一次出现-1 word

<?php
$string = array_reverse(explode(" ","This is a string, keyword next, some more text. keyword next-word."));
echo $string[array_search("keyword",$string) - 1];
/* OUTPUT next-word. */

Run it online

如果我们要进行多次搜索,这对性能很有好处,但是字符串的长度必须保持短(内存中的整个字符串)。