好的,所以我多年来一直在和这个正则表达式搏斗,我无法让它发挥作用。
我想做什么:
给定一个字符串我想要一个包含单词的字符串数组,每个字符串前面都有任何非单词字符。
示例输入字符串:
one "two" (three) -four-
字符串中的单词可能是任何内容,甚至是乱码,带有任何标点符号或符号。
我希望看到的内容:
array: one "two " (three ) -four -
基本上,对于每场比赛,最后一件事是一个单词,前面是前一场比赛剩余的任何内容。
正如本问题中所述,我将在PHP中使用它,我尝试了preg_match_all()和preg_split()的各种组合,模式包含许多变体“\ w”,“\ b”,“[^ \ w]“等等。
更大的图片
基本上我只是想在字符串中的每个单词之后放置*以供搜索。
我真的不是一个正则表达式的人,所以非常感谢帮助!
答案 0 :(得分:8)
如果您只想在每个“单词”后添加星号,则可以执行此操作:
<?php
$test = 'one "two" (three) -four-';
echo preg_replace('/(\w+)/', "$1*", $test);
?>
答案 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_]
你需要匹配!