如何将可选字符串分组?

3
我需要一个正则表达式来验证以下内容:
"Optional str1 as string = ''",
以及
"str2 as string"
还有
"str3 as boolean, Optional dtm as date = Now"
因此,当使用 "Optional" 时必须有一个 "=" 符号
"Optional" 是可选的。
这是我尝试过的正则表达式:
(Optional\s|)(.*)(\s=\s|)(.*)

这样做是不正确的。它验证了太多。

有什么提示吗?


看起来你所提出的问题可能只是你试图解决的真正问题的次要问题。(看起来你可能正在尝试验证现有编程语言的语法)。如果是这样,如果你提供更多关于你试图解决的更大问题的上下文信息,你可能会得到更高质量的答案。 - something_clever
1个回答

4
你可以使用锚点^来断言字符串的开头。
然后,如果字符串中包含Optional后跟等号,则匹配该字符串,否则(如果支持)使用负向先行断言,并使用交替符号|匹配整行,以匹配不包含Optional的字符串。
^(?:.*\bOptional\b.*\s=\s.*|(?!.*\bOptional\b).+)

解释

  • ^ 字符串开头
  • (?: 非捕获组
    • .*\bOptional\b.*\s=\s.* 如果整行包含 Optional 和等号,就匹配整行
    • | 或者
    • (?!.*\bOptional\b).+ 如果整行不包含 Optional 就匹配整行
  • ) 关闭非捕获组

正则表达式演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接