匹配正则表达式正则表达式草图引擎(不匹配子字符串)

时间:2021-04-02 06:09:45

标签: regex

我正在学习正则表达式,我正在尝试解决这个问题:https://regex.sketchengine.co.uk/cgi/ex1.cgi

到目前为止,我想出了:

^[psr][^ta|?!ea].*$

但是它不会检查它是否与作为子字符串的 'ea' 不匹配,而是尝试不匹配 'e' 和 'a' 作为第二个字符。我的错误是什么?

2 个答案:

答案 0 :(得分:1)

您的正则表达式有误,请参阅其说明:

<头>
节点 解释
^ 字符串的开头
[psr] 任何字符:'p'、's'、'r'
[^ta|?!ea] 任何字符,除了:'t'、'a'、'
.* 除 \n 以外的任何字符(0 次或多次(尽可能匹配最多))
$ 在可选的 \n 之前,以及字符串的结尾

使用

.*p[ioa ]t.*

proof

说明

--------------------------------------------------------------------------------
  .*                       any character except \n (0 or more times
                           (matching the most amount possible))
--------------------------------------------------------------------------------
  p                        'p'
--------------------------------------------------------------------------------
  [ioa ]                   any character of: 'i', 'o', 'a', ' '
--------------------------------------------------------------------------------
  t                        't'
--------------------------------------------------------------------------------
  .*                       any character except \n (0 or more times
                           (matching the most amount possible))

答案 1 :(得分:1)

在您的模式中,您不允许匹配 pe sere 排除 respite,但您只是不想允许 pe

您可以使用否定前瞻来排除 p 直接跟在您的字符类中的一个字符之后。

^(?!p[tea])[psr].*

模式匹配:

  • ^ 字符串的开头
  • (?!p[tea]) 否定前瞻,断言不是直接向右 ptpepa
  • [psr].* 匹配 p s r 后跟任意字符 0 次以上

Regex demo

注意示例数据中没有 | ?!