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 无法正则化某些模式(第2部分)_Php_Regex - Fatal编程技术网

Php 无法正则化某些模式(第2部分)

Php 无法正则化某些模式(第2部分),php,regex,Php,Regex,续自 我有以下正则表达式: ^(?!.* )[^#+&\'\"\\\\]*$ 现在我想完成以下几点: "" ---> invalid " " ---> invalid " a" ---> invalid "a b" ---> valid "a b" ---> invalid 有人能帮我吗?你可以使用这个正则表达式: ^(?!^.*\s{2}.*$)[^\s][^#+&'"\\\n\r]*[^\s]$ 在php中

续自

我有以下正则表达式:

^(?!.*  )[^#+&\'\"\\\\]*$
现在我想完成以下几点:

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

有人能帮我吗?

你可以使用这个正则表达式:

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

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


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

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

您可以使用

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

请参阅。此正则表达式不允许后续空格和任何前导/尾随空格,它是线性且快速的

详细信息

  • ^
    -字符串的开头
  • [^#+&'\\\\s]+
    -1+字符,除空格和任何
    \
    +
    &
    '
    \
    字符外
  • (?:\s[^#+&'\\\\s]+)*
    -零个或多个以下序列:

    • \s
      -空白(1次)
    • [^#+&'\\\\s]+
      -1+字符,除空格和任何
      \
      +
      &
      '
      \
      字符外
  • $
    -字符串结尾(替换为
    \z
    ,以便更安全地匹配)

这是一个只有回声
匹配的'ab'

if (preg_match('~^[^\s#+&\'"\\\\]+(?:\s[^\s#+&\'"\\\\]+)*$~', "")) {
    echo "Matched ''\n";
}
if (preg_match('~^[^\s#+&\'"\\\\]+(?:\s[^\s#+&\'"\\\\]+)*$~', " ")) {
    echo "Matched ' '\n";
}
if (preg_match('~^[^\s#+&\'"\\\\]+(?:\s[^\s#+&\'"\\\\]+)*$~', " a")) {
    echo "Matched ' a'\n";
}
if (preg_match('~^[^\s#+&\'"\\\\]+(?:\s[^\s#+&\'"\\\\]+)*$~', "a b")) {
    echo "Matched 'a b'\n";
}
if (preg_match('~^[^\s#+&\'"\\\\]+(?:\s[^\s#+&\'"\\\\]+)*$~', "a  b")) {
    echo "Matched 'a  b'\n";
}

你想要一个只包含一个空格的正则表达式,而不是你给出的排除字符,对吗?@ThomasAyoub是的…一个结束空格有效吗?是否允许在字符串中包含多个空格,如
abc
?我认为您需要@SebastianProske finishing space invalid…对于第二部分,是的,它允许。。。但在a和b或b和c之间没有双空格。。。
if (preg_match('~^[^\s#+&\'"\\\\]+(?:\s[^\s#+&\'"\\\\]+)*$~', "")) {
    echo "Matched ''\n";
}
if (preg_match('~^[^\s#+&\'"\\\\]+(?:\s[^\s#+&\'"\\\\]+)*$~', " ")) {
    echo "Matched ' '\n";
}
if (preg_match('~^[^\s#+&\'"\\\\]+(?:\s[^\s#+&\'"\\\\]+)*$~', " a")) {
    echo "Matched ' a'\n";
}
if (preg_match('~^[^\s#+&\'"\\\\]+(?:\s[^\s#+&\'"\\\\]+)*$~', "a b")) {
    echo "Matched 'a b'\n";
}
if (preg_match('~^[^\s#+&\'"\\\\]+(?:\s[^\s#+&\'"\\\\]+)*$~', "a  b")) {
    echo "Matched 'a  b'\n";
}