如何更好地使用preg_match

时间:2013-06-03 13:50:57

标签: preg-match

所以我一直在尝试构建一个基本上从txt文件中提取列表的脚本。

现在列表不是问题。它更像是alg。我正在使用

例如,

如果一个1设备的输出是ABC(R)1234我正在使用preg匹配来查找ABC然后切断)并取1234这就是我需要的。

但我刚注意到另一台设备,输出ABC 1234,所以我的剪辑不起作用。

我可以像这样做2个preg_match

preg_match(' / ABC /',$ match){等对吗?

但那是我的剪裁..

所以我说好了为什么我不为ABC(R)和ABC做一个preg匹配?

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

1 个答案:

答案 0 :(得分: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