正则表达式
\\(?:[A-Za-z@]+|.)
用于Texworks中的乳胶语法高亮显示。
为什么此表达式与\
之外的任何内容匹配?据我所知,前瞻不匹配任何东西(仅检查条件是否为真)。此表达式用于匹配Latex命令,这些命令通常为\command
,但也具有特殊字符\%,\|,...
,因此正则表达式中为.
。
有人可以解释原因吗?
答案 0 :(得分:2)
在给定的正则表达式中,
\\(?:[A-Za-z@]+|.)
()
是一个群组运营商。正则表达式将组操作符内的条目视为一个单元。
因此正则表达式接受像
这样的字符串 \.
,\|
,\a
等。
此外,正则表达式不会接受\
。
答案 1 :(得分:2)
?:
是一个非捕获组。 ?=
是一个先行者。 (?:)
的原因是|
适用于[A-Za-z@]
和.
。如果没有(?:)
,|
将适用于\\[A-Za-z@]
和.
。这将匹配任何字符串(因为.
将始终匹配),而不仅仅是具有\
的字符串(更多关于匹配的详细信息如下)。由于这只是指定|
范围的逻辑分组,因此无需保留捕获组,这就是使用?:
的原因。
看看正则表达式:
\\
表示开始与\
匹配。现在,字符串不需要以\
开头匹配。正则表达式将匹配\abc
,但它也会匹配字符串a\abc
,在这两种情况下匹配结果将为\abc
。
[A-Za-z@]+
- +
表示一个或多个。因此它匹配[]
中的一个或多个字符。这意味着\a
,\abc
,\a@b
等字符串将匹配
|
表示OR。
.
是任何单个字符(默认情况下不是换行符)。这意味着将匹配\a
,\#
,\,
等字符串。因此\
之后的第一个字符可以是任何字符,但如果它与[A-Za-z@]+
不匹配,则匹配将仅匹配第一个字符。例如,\#a
仅匹配\#
。
匹配示例,其中突出显示匹配结果:
\abc@
\abc@
\abc@
#一个\#
ABC @ \#
ABC @#一个不匹配的字符串示例(请注意,如果移除(?:)
,这些字符串将匹配)
答案 2 :(得分:1)
该模式仅匹配\
及其后面的任何字符。
(?:[A-Za-z@]+|.)
.
匹配任何字符(换行符除外)。 前面没有预测,here's a list of expressions可供参考。