匹配不仅由某些字符组成的正则表达式模式
Match Regex Pattern which does not only consist of certain characters
我正在尝试匹配不只包含特定字符的特定大小的字符串。
第一部分相当简单。要匹配这个:
是:“abcde / asbas”
是:“abcde/asbas”
是:“abcde/ ///”
是:“///aasd”
是:“/// aasd”
是:“avcdesc”
否:“AVASD/ASDB”
我使用这个表达式:
[ \/a-z0-9]{1,20}
但这也会匹配这样的内容:" ////"
因为我想避免这种情况,所以我尝试添加另一个表达式并使用 Lookahead:
组合它们
(?=(?![ \/]+$))(?=[ \/a-z0-9]{1,20}).*$
这可以避免前面的例子 " ////"
但是不知何故,有效字符之后的所有字符都会被忽略,因此会发生以下行为:
匹配 "asdad988AAA"
这样的字符串。
正如所解释的,这不是故意的。也许有人知道如何解决这个问题。
谢谢。
正则表达式 101:https://regex101.com/r/nmSMMu/1
你可以使用
^(?=[ \/]*[a-z0-9])[a-z0-9\/ ]{1,20}$
参见regex demo。 详情:
^
- 字符串开头
(?=[ \/]*[a-z0-9])
- 任何零个或多个空格或 /
个字符后必须有小写 ASCII 字母或数字
[a-z0-9\/ ]{1,20}
- 一到二十个小写 ASCII 字母、数字、/
或空格
$
- 字符串结尾。
我正在尝试匹配不只包含特定字符的特定大小的字符串。
第一部分相当简单。要匹配这个:
是:“abcde / asbas”
是:“abcde/asbas”
是:“abcde/ ///”
是:“///aasd”
是:“/// aasd”
是:“avcdesc”
否:“AVASD/ASDB”
我使用这个表达式:
[ \/a-z0-9]{1,20}
但这也会匹配这样的内容:" ////"
因为我想避免这种情况,所以我尝试添加另一个表达式并使用 Lookahead:
(?=(?![ \/]+$))(?=[ \/a-z0-9]{1,20}).*$
这可以避免前面的例子 " ////"
但是不知何故,有效字符之后的所有字符都会被忽略,因此会发生以下行为:
匹配 "asdad988AAA"
这样的字符串。
正如所解释的,这不是故意的。也许有人知道如何解决这个问题。
谢谢。
正则表达式 101:https://regex101.com/r/nmSMMu/1
你可以使用
^(?=[ \/]*[a-z0-9])[a-z0-9\/ ]{1,20}$
参见regex demo。 详情:
^
- 字符串开头(?=[ \/]*[a-z0-9])
- 任何零个或多个空格或/
个字符后必须有小写 ASCII 字母或数字[a-z0-9\/ ]{1,20}
- 一到二十个小写 ASCII 字母、数字、/
或空格$
- 字符串结尾。