用于包装除某些给定字符外的所有内容的Java正则表达式

用于包装除某些给定字符外的所有内容的Java正则表达式,java,regex,Java,Regex,我有一个字符串,比如 somet3x70rnumb3r5.3.1*@:ch4r5* 我需要用一个模式引号*将所有非*的星号字符包装起来,然后将*替换为*。它应该给出: \Qsomet3x70rnumb3r5.3.1\E.*\Q@:ch4r5\E.* 我可以通过字符串遍历、拆分*(或我指定的任何字符)和逐步构建字符串来实现这一点,但如果可能的话,我希望使用正则表达式和模式类实用程序 另一个具有指定字符?的示例,该字符将替换为: 123?4? 应该给 \Q123\E.\Q4\E. 我曾考虑使

我有一个字符串,比如

somet3x70rnumb3r5.3.1*@:ch4r5*
我需要用一个模式引号
*
将所有非
*
的星号字符包装起来,然后将
*
替换为
*
。它应该给出:

\Qsomet3x70rnumb3r5.3.1\E.*\Q@:ch4r5\E.*
我可以通过字符串遍历、拆分
*
(或我指定的任何字符)和逐步构建字符串来实现这一点,但如果可能的话,我希望使用正则表达式和模式类实用程序

另一个具有指定字符
的示例,该字符将替换为

123?4?
应该给

\Q123\E.\Q4\E.
我曾考虑使用组,但我需要在每个区域周围使用组,因为每个区域必须被包装或替换为另一个角色


我的目标是从给定的<代码>字符串中创建一个模式<代码>字符串>代码>,但只考虑与指定字符匹配的区域,而忽略其余部分(即使包含正则表达式)。一个班轮可能是可能的,但这将是一个痛苦。相反,我建议你这样做:

str = str.replaceAll("(?<!^)\\*(?!$)", "\\E.*\\Q")
         .replaceAll("(?<!^)\\?(?!$)", "\\E.\\Q");
str = "\\Q" + str + "\\E";
str=str.replaceAll(“(?类似这样的内容

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

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

所以你基本上想用反斜杠转义匹配的字符串,比如…
\somet3x70rnumb3r5.3.1.\\@:ch4r5\.
\123.
否。我想让某些指定字符周围的字符串区域像
\Q\E
一样被包装,并替换指定的字符d被其他人使用。
\Q---\E
被模式用来忽略它里面的任何东西。但是在正则表达式世界中,AFAIK
\Qanythinghere\E
\anythinghere
检查这里我不知道,我认为它需要结束标记,但我只希望模式忽略
anythinghere
,而外部的一切都需要考虑。Th我上面给出的例子包含句点
。这个字符将被视为模式匹配器中的任何字符,除非它在
\Q\e
中,否则它将被视为一个文本。这意味着在一个组中匹配除星号和问号以外的所有字符任意次数,并用包装版本替换它们?是的,任何字符都可以这不是一个星号或问号将被包装在\Q和\E中。这是你想要的吗?仅供参考,你不需要在括号内避开
*
”([^*?]+)“
工作正常。在这里的Java引擎上测试:@SotiriosDelimanolis-当然,这是一个零宽度的lookbehind断言。请查看,以获得比我能想到的更好的解释。