我有一个问题。我需要在每个单词之前添加+
,并在引号之间查看所有单词。
有这个代码
preg_replace("/\w+/", '+\0', $string);
导致此
+test +demo "+bla +bla2
"
但我需要
+test +demo +"bla bla2
"
有人可以帮助我:)
是否有可能不添加+?所以你没有得到++test
谢谢!
答案 0 :(得分:1)
我无法测试这个,但你可以尝试一下,让我知道它是怎么回事?
首先是正则表达式:从一系列字母中选择一个字母,这些字母可能带有或不带有'+',或者一个引号,后跟任意数量的字母或空格,前面可能有'+' '后跟引号。
我希望这与你的所有例子相符。
然后我们在你的字符串中获取正则表达式的所有匹配项,将它们存储在变量“$ matches”中,这是一个数组。然后,如果第一个字符有'+',我们就会遍历此数组测试。如果有,什么都不做,否则加一个。
然后我们将数组内爆成一个字符串,用空格分隔元素。
注意:我相信在作为preg_match参数提供时会创建$匹配。
$regex = '/[((\+)?[a-zA-z]+)(\"(\+)?[a-zA-Z ]+\")]/';
preg_match($regex, $string, $matches);
foreach($matches as $match)
{
if(substr($match, 0, 1) != "+") $match = "+" + $match;
}
$result = implode($matches, " ");
答案 1 :(得分:1)
也许你可以使用这个正则表达式:
$string = '+test demo between "double quotes" and between \'single quotes\' test';
$result = preg_replace('/\b(?<!\+)\w+|["|\'].+?["|\']/', '+$0', $string);
var_dump($result);
//将导致:
string '+test +demo +between +"double quotes" +and +between +'single quotes' +test' (length=74)
我使用了'负面观察'来检查'+'。 Regex lookahead, lookbehind and atomic groups