我正试图编写正则表达式来限制字符串中的空字符串和逗号
示例:
string = "" # not allowed
s = "ab c!@#)(*&^%$#~" # allowed
s = "sfsfsf,sdfsdf" # not allowed
此regexp的目的是在swagger文档中进行模式匹配,如以下属性:type: string pattern: "^[0-9A-Za-z_]+$" value: type: object
我尝试了这个正则表达式^(?!s*$)[^,]*$
,但它在swagger-doc中不受支持,我在这个正则表达式的golang代码中得到了这个错误:
invalid or unsupported Perl syntax: `(?!
实际上,您不需要向前看。
只需删除该前瞻表达式并将*
更改为+
,这将需要至少一个字符,并将正则表达式简化为^[^,]+$
让我知道这是否有效,或者你是否有更多的条件。
编辑:
考虑到@JvdV的评论(他似乎是对的(,您可以使用以下regex,
^s*([^,s]+s*)+$
如果至少有一个非空白字符,这将匹配,如果出现逗号,整个字符串将被拒绝
查看此演示
第1版:
为了避免灾难性的回溯,正则表达式可以简化如下:
^s*[^,s][^,]*$
说明:
^
-匹配输入开始s*
-可选匹配任何空白[^,s]
-至少匹配逗号和空白以外的一个字符[^,]*
-后面可以跟逗号以外的任何字符零次或多次$
-匹配字符串末尾
更新的演示
Edit2:为了避免前导/尾随空格,您可以使用此regex,
^[^s,]([^,]*[^s,])?$
演示避免前导/尾随空白