Java 正则表达式-转义还是字符块?
例如,如果字符串中需要问号,那么最好的方法是什么Java 正则表达式-转义还是字符块?,java,regex,Java,Regex,例如,如果字符串中需要问号,那么最好的方法是什么 ...[?]... 或 例如: 文本bla?bla将同时与模式bla[?]bla和bla\?bla(显然,bot不是bla?bla)匹配,但是否有任何理由使用其中一个而不是另一个呢?没有技术理由选择其中一个:它们是等价的表达式。character类仅用于避免输入反斜杠,因此转义版本更为“干净” 但是,原因可能是为了避免在输入时对斜杠进行双转义。在java等语言中,转义版本的文字版本如下所示: // in java you need to esc
...[?]...
或
例如:
文本
bla?bla
将同时与模式bla[?]bla
和bla\?bla
(显然,bot不是bla?bla
)匹配,但是否有任何理由使用其中一个而不是另一个呢?没有技术理由选择其中一个:它们是等价的表达式。character类仅用于避免输入反斜杠,因此转义版本更为“干净”
但是,原因可能是为了避免在输入时对斜杠进行双转义。在java等语言中,转义版本的文字版本如下所示:
// in java you need to escape a backslash with another backslash :(
String regex = "...\\?...";
这可能是因为正则表达式来自任何地方都有类似的问题,阅读
[?]
比\\?
更容易,我个人会使用\?
,因为这样可以消除混淆。当你只匹配一个字符时,为什么要使用字符块?@David Tx。为了澄清,我收到了一个很大的正则表达式URL模式列表(用于mod_安全白名单),几乎每行都有一个字符块,如上所述。我想知道这样做是否有目的,我是否应该费心用转义替换它们(为了性能等)。实际上,这里的解释可能更容易阅读,也可能更容易将正则表达式复制到java代码中。。。
// in java you need to escape a backslash with another backslash :(
String regex = "...\\?...";