我需要匹配以下模式的首次出现,从\s
开始,或(
然后NIC
,然后跟随#
或.
后跟的任何字符5
或6
位数。
使用正则表达式:
preg_match('/[\\s|(]NIC.*[#|.]\d{5,6}/i', trim($test), $matches1);
示例:
$test = "(NIC.123456";
//正常工作$test = "(NIC.123456 oldnic#65703 checking"
//生成结果(NIC.123456 oldnic#65703
但它只需要(NIC.123456
。有什么问题?
答案 0 :(得分:4)
您需要为非贪婪的匹配添加?
量词。这里.*
匹配的金额最多。
您也不需要在此处双重转义\\s
,您只需使用\s
即可组合字符类中的选择性字符,而不是添加管道{{1}分隔符。
另请注意,您的表达式将匹配以下|
之类的字符串,为避免这种情况,您可以使用与单词字符之间的边界匹配的单词边界(NIC_CCC.123456
。
\b
正则表达式:
preg_match('/(?<=^|\s)\(nic\b.*?[#.]\d{5,6}/i', $test, $match);
请参阅live demo
答案 1 :(得分:1)
尝试过使用 $ test1 = explode(“”,$ test); 并使用$ test1 [0]显示结果。