2013-06-03 118 views
0

所以我一直在试图建立一个基本上从txt文件中拉出一个列表的脚本。如何更好地使用preg_match

现在列表不是问题。它更像alg。即时通讯使用

例如。

如果一个1设备的输出是ABC(R)1234我使用preg匹配查找ABC,然后切割),并采取我所需要的1234。

但我只是注意到另一个设备,输出ABC 1234,所以我的剪切不起作用。

我可以做2个preg_matchs像这样

的preg_match( '/ ABC /',$匹配){等吧?

但多数民众赞成我切..

所以后来我说好为什么不我做ABC(R)和农行预浸比赛?

好吧,它不喜欢(R)..我如何匹配ABC(R)和ABC的preg_match。

回答

0

您可以使用?量词使正则表达式的一部分可选。像这样:

$pattern = '/ABC(?:\([^)]+\))?\s*/'; 

这里([^)]+)部分(其读为匹配左括号,然后任何不是一个关闭一个,则关闭一个)被置于一个非捕获组((?:...))表示法中,那就有?量词坚持它。换句话说,如果它匹配,它将捕获所有匹配的文本,但是如果它不存在,它甚至不会注意到。

你可以用它与preg_replace削减这些部件关闭(demo):

$test1 = 'ABC(R)1234'; 
$test2 = 'ABC 5678'; 
echo preg_replace($pattern, '', $test1), PHP_EOL; // 1234 
echo preg_replace($pattern, '', $test2), PHP_EOL; // 5678 
+0

这工作就像一个魅力。当然,我改变了一下,以适应我的需求,但谢谢你! – Luis