用替代品和可选项解析正则表达式

时间:2017-02-26 02:39:08

标签: regex regex-lookarounds regex-greedy chatbot rivescript

我正在构建RiveScript的chatbot子集,并尝试使用正则表达式构建模式匹配解析器。哪三个正则表达式匹配以下三个例子?

ex1: I am * years old
valid match:
- "I am 24 years old"
invalid match:
- "I am years old"

ex2: what color is [my|your|his|her] (bright red|blue|green|lemon chiffon) *
valid matches:
- "what color is lemon chiffon car"
- "what color is my some random text till the end of string"

ex3: [*] told me to say *
valid matches:
- "Bob and Alice told me to say hallelujah"
- "told me to say by nobody"

通配符表示任何非空文本都可以接受。

在示例2中,[ ]之间的任何内容都是可选的,( )之间的任何内容都是替代选项,每个选项或替代选项都以|分隔。

在示例3中,[*]是可选的通配符,表示可以接受空白文本。

1 个答案:

答案 0 :(得分:2)

  1. https://regex101.com/r/CuZuMi/4

    I am (?:\d+) years old
    
  2. https://regex101.com/r/CuZuMi/2

    what color is.*(?:my|your|his|her).*(?:bright red|blue|green|lemon chiffon)?.*
    
  3. https://regex101.com/r/CuZuMi/3

    .*told me to say.*
    
  4. 我主要使用两件事:

    1. (?:)非捕获组,将事物分组在一起,就像在数学上使用括号一样。
    2. .*匹配任何字符0次或更多次。可以由{1,3}替换为1到3次匹配。
    3. 您可以通过*兑换+以匹配至少1个字符,而不是0。 非捕获组之后的?使该组可选。

      这些是你开始的黄金地方:

      1. http://www.rexegg.com/regex-quickstart.html
      2. https://regexone.com/
      3. http://www.regular-expressions.info/quickstart.html
      4. Reference - What does this regex mean?