我有一个像
这样的字符串somet3x70rnumb3r5.3.1*@:ch4r5*
我需要使用模式引用*
包装不是\Q...\E
,星号字符的所有内容,并将*
替换为.*
。它应该给出这个:
\Qsomet3x70rnumb3r5.3.1\E.*\Q@:ch4r5\E.*
我可以使用字符串遍历,在*
(或我指定的任何字符)上拆分,并逐步构建字符串,但是如果可能的话,我想使用正则表达式和Pattern类实用程序。
指定字符?
的另一个示例,它将被.
替换:
123?4?
应该给出
\Q123\E.\Q4\E.
我正在考虑使用群组,但我需要围绕每个区域的群组,因为每个群组必须被包裹或替换为其他角色。
我的目标是从给定的String
创建一个模式String
,但只考虑与指定字符匹配的区域并忽略其余区域(即使它包含正则表达式模式)。
答案 0 :(得分:1)
如果你不担心建造一个单轮班车会更简单。单线可能是可能的,但这将是一个痛苦。相反,我建议你做这样的事情:
str = str.replaceAll("(?<!^)\\*(?!$)", "\\E.*\\Q")
.replaceAll("(?<!^)\\?(?!$)", "\\E.\\Q");
str = "\\Q" + str + "\\E";
编写起来更简单,也更容易理解。
答案 1 :(得分:1)
这样的东西?
String s = "abc*efg?123";
s = s.replaceAll("([^\\*\\?]+)", "\\\\Q$1\\\\E");
s = s.replaceAll("\\*", ".*");
s = s.replaceAll("\\?", ".");
\Qabc\E.*\Qefg\E.\Q123\E