我正在学习正则表达式,我正在尝试解决这个问题:https://regex.sketchengine.co.uk/cgi/ex1.cgi
到目前为止,我想出了:
^[psr][^ta|?!ea].*$
但是它不会检查它是否与作为子字符串的 'ea' 不匹配,而是尝试不匹配 'e' 和 'a' 作为第二个字符。我的错误是什么?
答案 0 :(得分:1)
您的正则表达式有误,请参阅其说明:
节点 | 解释 |
---|---|
^ |
字符串的开头 |
[psr] |
任何字符:'p'、's'、'r' |
[^ta|?!ea] |
任何字符,除了:'t'、'a'、' |
.* |
除 \n 以外的任何字符(0 次或多次(尽可能匹配最多)) |
$ |
在可选的 \n 之前,以及字符串的结尾 |
使用
.*p[ioa ]t.*
说明
--------------------------------------------------------------------------------
.* 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
se
和 re
排除 respite
,但您只是不想允许 pe
。
您可以使用否定前瞻来排除 p
直接跟在您的字符类中的一个字符之后。
^(?!p[tea])[psr].*
模式匹配:
^
字符串的开头(?!p[tea])
否定前瞻,断言不是直接向右 pt
或 pe
或 pa
[psr].*
匹配 p
s
r
后跟任意字符 0 次以上注意示例数据中没有 |
?
或 !
。