我在用记事本++并学习正则表达式,但我想知道为什么某些元字符在编辑器中不起作用,即星号(*)和加号(+)。
例如:
这棵树长满了叶子和花朵,看上去非常美丽。
正则表达式:[tre*]
上述正则表达式在 Notepad++ 中无法按预期工作。
答案1
我的目的是匹配
tre
和它的前人物。
那么在你的例子中,The tree is looking awesome with leaves and flowers.
fragment 这个词tre
不是先行同一单词中的任何字符,其前面都是属于较早单词的字符。这使得你的问题看起来有点模棱两可。
为了匹配后跟“t”然后是“r”然后是“e”的任何字符,我会使用.*tre
。
为了匹配“t”然后是“r”然后是“e”后面跟着的任意字符,我会使用tre.*
。
为了匹配单词从“t”开始,然后是“r”,然后是“e”,我会使用tre\w*
我的正则表达式是 [tre*]
匹配单个字符,匹配的字符可以是任意一指定的四个字符之一。[]
元字符内部*
仅被视为普通字符(因为这是在那种情况下最有用的处理方式)。
括号[]
用于指定在文本中找到的一个字符,该字符可能有多种可能性。例如,如果您想要匹配单词Tree
或 ,则tree
可以使用[Tt]ree
,这意味着匹配一个字符,该字符后跟第二个字符T
,该字符后跟第三个字符,该字符后跟第四个字符,即。t
r
e
e
您可以使用匹配Tree
和,但匹配任何单个字符,因此 RE 也会匹配和您可能不想要的其他单词。为您提供了一种比指定要匹配的文本中单个字符的值更具体的方法tree
.ree
.
free
[]
.
答案2
*
并且+
当在字符类中时不是元字符。这通常适用于正则表达式,而不仅适用于 Notepad++。[a*+]
意味着“匹配单个a
,*
或+
”。
如果要匹配任意数量的字符t
、r
或e
,请使用[tre]*
。它将匹配以下任意一个:
tttrreerer
rrrrrr
er
t
(empty line)
如果要匹配单个t
、单个r
或任意数量的e
s,请使用([tr]|e*)
或(t|r|e*)
。此正则表达式匹配以下行:
t
r
eeeeeeeee
(empty line)
并且不会匹配例如tre
。
这是一个很好的正则表达式教程。