正则表达式 - 转义还是字符块?

3
如果一个字符串中需要包含问号,最好的方法是什么?
...[?]...

或者
...\?...

例子:

文本 bla?bla 既可以与模式 bla[?]bla 匹配,也可以与 bla\?bla 匹配(但显然不能与 bla?bla 匹配),但使用其中一个而不是另一个有什么理由吗?


3
我个人会使用 \?,因为它可以消除歧义。当你只匹配单个字符时,为什么要使用字符块呢? - David B
@David Tx。为了澄清,我收到了一个包含正则表达式URL模式的大列表(用于mod_security白名单),几乎每行都有像上面那样的单个字符块。我想知道这样做的目的是什么,是否应该将它们替换为转义字符(以提高性能或其他方面)。 - Stijn Geukens
1个回答

3

在技术上没有偏好的理由:它们是等效的表达式。字符类仅用于避免输入反斜杠,因此我认为转义版本更加“干净”。

然而,原因可能是为了避免在输入时对斜杠进行双重转义。在像Java这样的语言中,转义版本的文字版本将如下所示:

// in java you need to escape a backslash with another backslash :(
String regex = "...\\?..."; 

可能是从正则表达式的来源处存在类似问题,使用[?]比使用\\?更易于阅读。

1
确实,更容易阅读的解释可能在这里,并且也许更容易将正则表达式复制到Java代码中... - Stijn Geukens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接