php - 正则表达式匹配第一次出现

时间:2013-11-19 03:25:39

标签: php regex

我需要匹配以下模式的首次出现,从\s开始,或(然后NIC,然后跟随#.后跟的任何字符56位数。

使用正则表达式:

preg_match('/[\\s|(]NIC.*[#|.]\d{5,6}/i', trim($test), $matches1);

示例:

  1. $test = "(NIC.123456"; //正常工作
  2. $test = "(NIC.123456 oldnic#65703 checking" //生成结果(NIC.123456 oldnic#65703
  3. 但它只需要(NIC.123456。有什么问题?

2 个答案:

答案 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]显示结果。