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:
请参阅。此正则表达式不允许后续空格和任何前导/尾随空格,它是线性且快速的
详细信息:
-字符串的开头^
-1+字符,除空格和任何[^#+&'\\\\s]+
,\
,+
,&
,'
,“
,
字符外\
-零个或多个以下序列:(?:\s[^#+&'\\\\s]+)*
-空白(1次)\s
-1+字符,除空格和任何[^#+&'\\\\s]+
,\
,+
,&
,'
,“
,
字符外\
-字符串结尾(替换为$
,以便更安全地匹配)\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";
}