首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用preg_match拆分字符串

用preg_match拆分字符串
EN

Stack Overflow用户
提问于 2015-01-21 07:33:41
回答 3查看 2K关注 0票数 0

我有绳子:

代码语言:javascript
复制
$productList="
Saluran Dua(Bothway)-(TAN007);
Speedy Password-(INET PASS);
Memo-(T-Memo);
7-pib r-10/10-(AM);
FBI (R/N/M)-(Rr/R(A));
";

我想要这样的结果:

代码语言:javascript
复制
Array(
[0]=>TAN007
[1]=>INET PASS
[2]=>T-Memo
[3]=>AM
[4]=>Rr/R(A)
);

我用:

代码语言:javascript
复制
$separator = '/\-\(([A-z ]*)\)/';
preg_match_all($separator, $productList, $match);
$value=$match[1];

但结果是:

代码语言:javascript
复制
Array(
[0]=>INET PASS
[1]=>AM
);

一定是密码错了,有人能帮上忙吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-21 07:39:43

对于第1行,需要0-9。

对于第3行,您需要一个- in和

在最后一行中,您需要()尝试如下

代码语言:javascript
复制
 #\-\(([a-zA-Z/0-9(\)\- ]*)\)#
票数 0
EN

Stack Overflow用户

发布于 2015-01-21 07:50:48

您的regex不包括所有可以出现在要捕获的文本中的字符。

正确的regex是:

代码语言:javascript
复制
$match = array();
preg_match_all('/-\((.*)\);/', $productList, $match);

Explanation (从内部到外部):

  • .*匹配任何东西;
  • (.*)是上面放在括号中的表达式,用于捕获$match[1]中的匹配;
  • -\((.*)\);是上下文中的上述内容:如果它前面是-(,后面是);,则匹配;括号被转义为使用它们的字面值,而不是它们的特殊regex解释;
  • 没有必要在regex中转义-;它只有在字符范围内使用时才有特殊的解释([A-Z],f.e.)但是即使在那里,如果破折号(-)就在[后面或者在]之前,那么它就没有特殊的意义;例如[-A-Z]的意思是:破折号(-)或任何大写字母(A to Z)。

现在,print_r($match[1]);看起来是这样的:

代码语言:javascript
复制
Array
(
    [0] => TAN007
    [1] => INET PASS
    [2] => T-Memo
    [3] => AM
    [4] => Rr/R(A)
)
票数 3
EN

Stack Overflow用户

发布于 2015-01-21 07:36:43

尝试使用这个ReGex

代码语言:javascript
复制
$separator = '#\-\(([A-Za-z0-9/\-\(\) ]*)\)#';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28061803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档