繁体   English   中英

使用preg_match分割字符串

[英]Split String With preg_match

我有字符串:

$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));
";

我想要这样的结果:

Array(
[0]=>TAN007
[1]=>INET PASS
[2]=>T-Memo
[3]=>AM
[4]=>Rr/R(A)
);

我用了 :

$separator = '/\-\(([A-z ]*)\)/';
preg_match_all($separator, $productList, $match);
$value=$match[1];

但是结果是:

Array(
[0]=>INET PASS
[1]=>AM
);

必须有错误的代码,有人可以帮助吗?

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

正确的regex为:

$match = array();
preg_match_all('/-\((.*)\);/', $productList, $match);

说明 (从内到外):

  • .*匹配任何东西;
  • (.*)是上面括号中的表达式,用于捕获$match[1]
  • -\\((.*)\\); 在上下文中是上面的内容:如果在-(之前加);之后匹配,则匹配); ; 括号转义为使用其字面值而不是其特殊的regex解释;
  • 无需逃脱-在正则表达式中; 仅当在字符范围( [AZ] ,fe)中使用它时,它才具有特殊的解释,但是即使在连字符( - )紧接在[]之前,连破折号( - )也没有特殊含义; 例如[-AZ]表示:破折号( - )或任何大写字母( AZ )。

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

Array
(
    [0] => TAN007
    [1] => INET PASS
    [2] => T-Memo
    [3] => AM
    [4] => Rr/R(A)
)

试试这个ReGex

$separator = '#\-\(([A-Za-z0-9/\-\(\) ]*)\)#';

对于第一行,您需要0-9

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

在最后一行中,您需要()试试这个

 #\-\(([a-zA-Z/0-9(\)\- ]*)\)#

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM