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 = "...\\?...";