[英]Unclosed Character Class (Regex)
因此,我有一个半复杂的正则表达式,它在两个字符串之间搜索所有文本,然后替换它。
我的搜索正则表达式是:
(jump *[A-Z].*)(?:[^])*?([A-Z].*:)
这在最终的结束括号中提供了一个Unclosed字符类,我一直在努力解决。 regex似乎可以在RegexR( http://regexr.com/?38k63 )上正常工作
谁能提供帮助或见解?
提前致谢。
错误在这里:
(jump *[A-Z].*)(?:[^])*?([A-Z].*:)
^
在字符类中, ^
仍然是特殊字符。 当您放置其他字符时,它通常会否定其他字符。 因此,在Java中使用\\\\
对其进行转义。
不同的正则表达式引擎将对[^]
不同的处理。 有人会假设这是一个否定字符类的开始,不包括]
和该模式中直到下一个]
任何字符(例如[^][]
将匹配除]
和[
之外的任何字符)。 其他引擎将被视为空的否定字符类(它将匹配任何内容)。 这就是为什么某些正则表达式引擎可以运行,而另一些则将其报告为错误的原因。
如果要让它与文字^
字符匹配,则必须像这样转义它:
(jump *[A-Z].*)(?:[\^])*?([A-Z].*:)
或者更好的是,只需将其从字符类中删除(您仍然必须对其进行转义,因为^
在字符类之外也具有特殊含义):
(jump *[A-Z].*)(?:\^)*?([A-Z].*:)
或者,如果您要让它匹配下一个[AZ].*:
,请尝试这样的字符类:
(jump *[A-Z].*)(?:[\s\S])*?([A-Z].*:)
当然,因为这是Java,所以不要忘记您需要对任何字符串文字中的所有\\
字符进行转义。
在使用[^]
:
(jump *[A-Z].*)(?:[^])*?([A-Z].*:)
^
-------------------|
尝试使用此正则表达式:
(jump *[A-Z].*)[\\s\\S]*?([A-Z].*:)
或这个:
(?s)(jump *[A-Z].*).*?([A-Z].*:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.