Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何预匹配除换行符以外的符号数?_Php_Regex - Fatal编程技术网

Php 如何预匹配除换行符以外的符号数?

Php 如何预匹配除换行符以外的符号数?,php,regex,Php,Regex,我想使用PCRE表达式,以确保除换行符以外的所有符号的长度与某些范围相匹配: preg_match('/^.{1,7}$/',“some\n\ntxt”) 我怎样才能做到这一点?试图使用[^\n]但运气不佳您也可以反转条件并测试模式是否不匹配: if ( !preg_match('/^.{8}/m', "some\n\ntxt") ) m修饰符更改与行的开始和结束(而不是默认的字符串)匹配的锚点^和$的含义。 ^(?(?:\r?\n)*[^\r\n]){1,7}(?:\r?\n)*$ 解释

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

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


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

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

if ( !preg_match('/^.{8}/m', "some\n\ntxt") )
m修饰符更改与行的开始和结束(而不是默认的字符串)匹配的锚点
^
$
的含义。

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

解释

 ^                     # 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
 ^                     # 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

您还可以将其推广到空格

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

解释

 ^                     # 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
 ^                     # 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

非常简单地解决了我的回答中的问题。@ Barmar:也许:<代码> > ^ {0},7}(::\n,{0,7})*/$/<代码>一个“积极”模式。这不允许在最后一个单词后面加上换行符。哦,我看到了,因为你用“代码”{0},7} < />代码可选。我只认为自己是一个半个有ReGEXP的半神。你是主人。:)简单的方法是做一个临时的,删除所有的换行符,然后对长度做一个bool:0