Php 如何预匹配除换行符以外的符号数?
我想使用PCRE表达式,以确保除换行符以外的所有符号的长度与某些范围相匹配: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)*$ 解释
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