preg在每场比赛中只匹配一行

时间:2017-12-06 10:33:24

标签: php regex preg-match

我有这种模式..匹配不能跨越多行(匹配中不能有任何换行符)所以我添加了m修饰符..

但有时匹配中有\n ..如何防止这种情况?

preg_match_all('/(?<!\d|\d\D)(?:dk)?([\d\PL]{8,})/m', $input, $matches, PREG_PATTERN_ORDER);

1 个答案:

答案 0 :(得分:0)

\PL模式匹配任何char但是Unicode字母,并且还匹配数字空白字符。因此,[\d\PL]可以缩短为\PL,因为您需要从中减去换行符,将其替换为反向速记字符类(\pL)并在否定括号表达式中使用它,[^\pL],并在其中添加\r\n

'/(?<!\d|\d\D)(?:dk)?([^\pL\r\n]{8,})/u'

m修饰符是多余的,因为它只重新定义了^$锚点的行为。您可能需要u修饰符,因为Unicode属性类可以安全地使用PHP / PCRE中的Unicode字符串。如果您只想匹配ASCII数字,请将\d更改为[0-9],将\D更改为[^0-9]