2

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

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 中,the[*]是可选通配符,表示可以接受空白文本。

4

1 回答 1

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.*
    

我主要使用两件事:

  1. (?:)非捕获组,将事物组合在一起,例如数学中的括号使用。
  2. .*匹配任何字符 0 次或更多次。可以替换{1,3}为匹配 1 到 3 次。

您可以交换*by+以匹配至少 1 个字符,而不是 0。?在非捕获组之后,使该组成为可选的。


这些是您开始的黄金地点:

  1. http://www.rexegg.com/regex-quickstart.html
  2. https://regexone.com/
  3. http://www.regular-expressions.info/quickstart.html
  4. 参考 - 这个正则表达式是什么意思?
于 2017-02-26T02:50:21.323 回答