0

我有一个字符串,例如

somet3x70rnumb3r5.3.1*@:ch4r5*

*我需要用 Pattern Quote包装所有不是星号的东西,\Q...\E并将其替换*.*. 它应该给出这个:

\Qsomet3x70rnumb3r5.3.1\E.*\Q@:ch4r5\E.*

我可以通过字符串遍历、拆分*(或我指定的任何字符)以及逐步构建字符串来做到这一点,但如果可能的话,我想使用正则表达式和 Pattern 类实用程序。

另一个带有指定字符的示例?,将替换为.

123?4?

应该给

\Q123\E.\Q4\E.

我正在考虑使用组,但我需要每个区域周围的组,因为每个区域都必须被另一个字符包裹或替换。

String我的目标是从给定的模式创建一个模式,String但只考虑与指定字符匹配的区域并忽略其余部分(即使它包含正则表达式模式)。

4

2 回答 2

1

如果您不担心构建单线,它会更简单。单线可能是可能的,但这会很痛苦。相反,我建议你这样做:

str = str.replaceAll("(?<!^)\\*(?!$)", "\\E.*\\Q")
         .replaceAll("(?<!^)\\?(?!$)", "\\E.\\Q");
str = "\\Q" + str + "\\E";

写起来更简单,也更容易理解。

于 2013-01-14T22:37:17.947 回答
1

像这样的东西?

String s = "abc*efg?123";
s = s.replaceAll("([^\\*\\?]+)", "\\\\Q$1\\\\E");
s = s.replaceAll("\\*", ".*");
s = s.replaceAll("\\?", ".");

结果是\Qabc\E.*\Qefg\E.\Q123\E

于 2013-01-14T22:37:51.207 回答