无法正则表达某些模式(第2部分)

时间:2016-07-20 07:39:32

标签: php regex

来自unable to regex certain pattern

的续约

我有以下正则表达式:

^(?!.*  )[^#+&\'\"\\\\]*$

现在我要完成以下任务:

""      ---> invalid
" "     ---> invalid
" a"    ---> invalid
"a b"   ---> valid
"a  b"  ---> invalid

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式:

^(?!^.*\s{2}.*$)[^\s][^#+&'"\\\n\r]*[^\s]$

在php中:

$re = "/^(?!^.*\\s{2}.*$)[^\\s][^#+&'\"\\\\\\n\\r]*[^\\s]$/m"; 

请参阅demo

(?!^.*\s{2}.*$)将确保字符串不包含连续的空格。

^[^\\s][^#+&'\"\\\\\\n\\r]*[^\\s]$将确保字符串不包含前导或尾随空格。

答案 1 :(得分:1)

您可以使用

^[^#+&'"\\\s]+(?:\s[^#+&'"\\\s]+)*$

PHP:

$re = '~^[^\s#+&\'"\\\\]+(?:\s[^\s#+&\'"\\\\]+)*$~';

请参阅regex demo。这个正则表达式不允许随后的空格和任何前导/尾随空格,是线性和快速的。

<强>详情:

  • ^ - 字符串开头
  • [^#+&'"\\\s]+ - 除了空格以外的1个字符以及#+&'",{{ 1}}字符
  • \ - 零个或多个序列:

    • (?:\s[^#+&'"\\\s]+)* - 空白(1次)
    • \s - 除了空格以外的1个字符以及[^#+&'"\\\s]+#+&',{{ 1}}字符
  • " - 字符串结尾(替换为\以获得更安全的匹配)

这是IDEONE PHP demo只有echos $

\z