我是regex的新手,我正在尝试搜索几个字符串。
我想检查一下某个字符,在这种情况下,字符串中是否存在“:”(不带引号)。
如果:字符串中不存在它仍然匹配,但如果:存在,则只有空格和新行才允许存在。
我有这种模式,但似乎没有按照我想要的方式工作。
(.*)(:?\s*\n*)
谢谢。
答案 0 :(得分:5)
如果我正确理解您的问题,^[^:]*(:\s*)?$
让我们稍微分解一下:
^
开始锚;如果没有这个,匹配可以在每次看到另一个冒号或冒号后的非空格时重新启动。
[^:]*
匹配任何非冒号字符的字符数;这样,如果整个字符串都是非冒号字符,则该字符串将被视为有效匹配。
(:\s*)?
如果在任何时候我们执行看到冒号,则所有后续字符必须是空格,直到字符串结尾;分组parens和跟随?
的行为使这成为一个全有或全无的条件陈述。
$
结束锚;如果没有这个,正则表达式将不知道如果它看到冒号,则后面的空格必须持续到字符串的结尾。
答案 1 :(得分:1)
这是一个应该起作用的模式
/^([^:]*|([^:]*:\s*))$/
您可以使用管道来管理替代方案