PHP正则表达式匹配单词

时间:2013-02-18 17:45:38

标签: php regex

好的,所以我多年来一直在和这个正则表达式搏斗,我无法让它发挥作用。

我想做什么:

给定一个字符串我想要一个包含单词的字符串数组,每个字符串前面都有任何非单词字符。

示例输入字符串:

one "two" (three) -four-

字符串中的单词可能是任何内容,甚至是乱码,带有任何标点符号或符号。

我希望看到的内容:

array:
one
 "two
" (three
) -four
-

基本上,对于每场比赛,最后一件事是一个单词,前面是前一场比赛剩余的任何内容。

正如本问题中所述,我将在PHP中使用它,我尝试了preg_match_all()和preg_split()的各种组合,模式包含许多变体“\ w”,“\ b”,“[^ \ w]“等等。

更大的图片

基本上我只是想在字符串中的每个单词之后放置*以供搜索。

我真的不是一个正则表达式的人,所以非常感谢帮助!

4 个答案:

答案 0 :(得分:8)

如果您只想在每个“单词”后添加星号,则可以执行此操作:

<?php
$test = 'one "two" (three) -four-';

echo preg_replace('/(\w+)/', "$1*", $test);
?>

http://phpfiddle.org/main/code/8nr-bpb

答案 1 :(得分:7)

您可以使用否定前瞻来分割字边界,如下所示:

$array = preg_split( '/(?!\w)\b/', 'one "two" (three) -four-');

print_r( $array); gives you所需的确切输出:

Array
(
    [0] => one
    [1] =>  "two
    [2] => " (three
    [3] => ) -four
    [4] => -
)

答案 2 :(得分:0)

这是一个如何在PHP中使用正则表达式查找单词的示例。

<?php
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>

答案 3 :(得分:0)

替代

[^\w]*(\b\w*\b)?
----- ----------
 |        |
 |        |->matches a word 0 or 1 time
 |->matches 0 to many characters except [a-zA-Z0-9_]

你需要匹配!