在单词之前添加+,在引号之间查看所有单词

时间:2015-10-23 10:36:44

标签: php preg-replace

我有一个问题。我需要在每个单词之前添加+,并在引号之间查看所有单词。

有这个代码

preg_replace("/\w+/", '+\0', $string);

导致此

+test +demo "+bla +bla2"

但我需要 +test +demo +"bla bla2"

有人可以帮助我:) 是否有可能不添加+?所以你没有得到++test

谢谢!

2 个答案:

答案 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