我一直面临着正则表达式字符串匹配的问题。这是我的字符串 - var String detectionString = Stack Overflow(你好)
我尝试过这个正则表达式测试 - \ s(detectString)\ b 但是只能成功匹配字符串 Stack Overflow 。任何人都可以帮助提供一个可以匹配&的正则表达式字符串。包括括号内的单词。
这里我尝试匹配我的字符串并成功但它需要在字符串之间使用正则表达式(方括号覆盖括号可以解决此问题),如(Stack Overflow [(] 你好 [)] )。而我的问题是我无法在字符串之间添加表达式。
注意:可以有任何类型的带括号的字符串,如 var String detectionString = Krunal Bhavsar 123(iOS)。
答案 0 :(得分:3)
我建议通过将整个目标字符串括在\Q
和\E
之间来引用它:
Pattern p = Pattern.compile("\\b\\QStack Overflow (hello)\\E\\b");
这也很有效如果您正在尝试动态构建模式,那么可以匹配其他目标字符串。在这种情况下唯一需要注意的是,您需要注意目标字符串包含双字符子串\E
的情况。如果确实如此,那么你将逃脱它。
例如,您可以在文字\E\Q
和\
之间插入E
。也就是说,要匹配字符串This string has literal \E inside
,您可以使用
Pattern p = Pattern.compile(
"\\b\\QThis string has literal \\\\E\\QE inside\\E\\b");
还要注意 String
文字的转义语法与正则表达式引擎解释的转义序列之间的区别。这些是单独的层。
<强> 更新 强>
此外,我或多或少地关注了匹配边界的原始模式尝试 - 也就是说,通过引导和尾随\b
来匹配单词边界。然而,事实证明,输入的结尾不构成Java目的的字边界(尽管开始)。因此,在一个或两个地方使用零宽度断言可能更适合您的目的。例如:
Pattern p = Pattern.compile("(?<!\\w)\\QStack Overflow (hello)\\E(?!\\w)");
当然,您可能需要根据您的特定需求调整细节,但 可以在我的测试中使用。
答案 1 :(得分:0)
类似的东西:
(Stack Overflow)\s(\(hello\))