如何preg_match除换行符之外的符号数?

时间:2017-07-13 23:07:24

标签: php regex

我想使用PCRE表达式确保除换行符之外的所有符号的长度匹配某些范围:

preg_match('/^.{1,7}$/', "some\n\ntxt")

我怎样才能做到这一点?试图使用[^\n]但没有运气

2 个答案:

答案 0 :(得分:2)

您也可以反转条件并测试模式是否匹配:

if ( !preg_match('/^.{8}/m', "some\n\ntxt") )

m修饰符更改与行的开头和结尾匹配的锚^$的含义(默认情况下不是字符串)

答案 1 :(得分:0)

这有效

^(?:(?:\r?\n)*[^\r\n]){1,7}(?:\r?\n)*$

https://regex101.com/r/D8lJmv/3

解释

 ^                     # BOS
 (?:                   # Cluster begin
      (?: \r? \n )*         # optional many newlines
      [^\r\n]               # single non-newline
 ){1,7}                # Cluster end, 1 - 7 non-newline chars 
 (?: \r? \n )*         # optional many newlines
 $                     # EOS

您也可以将其概括为空格

^(?:\s*\S){1,7}\s*$

解释

 ^                     # BOS
 (?:                   # Cluster begin
      \s*                   # optional many whitespaces
      \S                    # single non-whitspace
 ){1,7}                # Cluster end, 1 - 7 non-whitespace chars 
 \s*                   # optional many whitespaces
 $                     # EOS