2013-03-02 39 views
0

我感到困惑的一个php正则表达式,需要提取两个查询通过从搜索请求(其中可能包括数字和/或特殊字符的+加号句子分开)。PHP的preg_match分割字符串通过加号分离

任何人都可以阐明这种行为?

$string = 'string1+String-2'; 

([a-zA-Z0-9-_]+[a-zA-Z0-9-_]) 

Array 
(
    [0] => string1 
    [1] => string1 
) 
+0

你为什么不使用两个比赛组' (..)'然后呢?或如果没有断言是必要的分裂/爆炸? – mario 2013-03-02 14:40:31

+2

'+'在正则表达式中有特殊含义。如果你需要普通的+你必须把它作为'\ +'转义。 – dfsq 2013-03-02 14:41:33

+0

请发布您的实际代码,而不仅仅是它的缩写。即在哪里实际调用preg函数? – Danack 2013-03-02 14:43:22

回答

1

你能做到这样

/([\w-]+\+[\w-]+)/ 

方括号后面的转义+说: 转义\+代表纯+“之前一次或多次表达”。

1

假设你正在使用的功能preg_match

你的模式([a-zA-Z0-9-_]+[a-zA-Z0-9-_])被mMatching任何一个字母或数字一次或多次,随后是字母或数字。

所以它匹配string后跟1。你看到的输出就是它所做的功能。

如果提供了匹配项,则会填充搜索结果。 $匹配[0]将包含匹配完整模式的文本, $匹配1将具有匹配第一个捕获的 括号内子模式的文本,依此类推。

我猜你可能打算使用preg_match_all来获取所有匹配模式。

3

的另一种方法是使用explode()

$string = 'string1+String-2'; 

$parts=explode("+",$string); 

print_r($parts); 

与输出:

Array 
(
    [0] => string1 
    [1] => String-2 
) 

查看更多在这里:

http://php.net/manual/en/function.explode.php

+0

我正在寻找一个纯粹的'preg_match'解决方案。 – mate64 2013-03-02 14:58:50