换行符与开始或结束之间的preg_match

时间:2016-05-16 16:04:17

标签: php regex preg-match

我的值中有很多行,我需要在换行符,返回和开始或结束之间运行preg_match。

$text = "
ENG CHG NOTE
2A
LTR CHK
AH 2000
YE
NOTE 2
";

例如:

preg_match("/((?P<value>\\d+(.\\d+)*?)\s?(?P<unit>YE))/"

我想确保preg_match仅在上面的示例中查找数字和YE。在该示例中,属于AH的示例2000将为YE显示错误值。如何围绕我当前的正则表达式包含\ r \ n和开头或结尾?

1 个答案:

答案 0 :(得分:1)

  

在此示例中,属于AH的示例2000将显示YE的错误值。如何围绕我当前的正则表达式包含\r\n以及开始或结束?

在您拥有的示例中,数字紧跟在YE后跟换行符后。由于\s也匹配换行符号,因此您需要调整模式以仅匹配水平空格

您可以在此处使用两种模式:\h[^\S\r\n]

'~(?P<value>\d+(?:.\d+)*?)\h?(?P<unit>YE)~'
                          ^^

regex demoPHP demo

$re = '~(?P<value>\d+(?:.\d+)*?)\h?(?P<unit>YE)~'; 
$str = "ENG CHG NOTE\n2A\nLTR CHK\nAH 2000\nYE\nNOTE 2\n3444 YE\n"; 
preg_match_all($re, $str, $matches);
print_r($matches);