【发布时间】:2013-01-14 22:27:33
【问题描述】:
我有一个字符串,例如
somet3x70rnumb3r5.3.1*@:ch4r5*
我需要将不是*(星号)的所有内容都包含一个模式引用\Q...\E,并将* 替换为.*。它应该给出这个:
\Qsomet3x70rnumb3r5.3.1\E.*\Q@:ch4r5\E.*
我可以通过字符串遍历、拆分*(或我指定的任何字符)以及逐步构建字符串来做到这一点,但如果可能的话,我想使用正则表达式和模式类实用程序。
另一个带有指定字符? 的示例将被. 替换:
123?4?
应该给
\Q123\E.\Q4\E.
我正在考虑使用组,但我需要在每个区域周围设置组,因为每个区域都必须被包裹或替换为另一个字符。
我的目标是从给定的String 创建一个模式String,但只考虑与指定字符匹配的区域并忽略其余区域(即使它包含正则表达式模式)。
【问题讨论】:
-
所以你基本上想用反斜杠转义匹配的字符串??喜欢...
\somet3x70rnumb3r5.3.1.*\@:ch4r5\.*和\123.\4.?? ` -
没有。我希望某个指定字符周围的字符串区域像
\Q<string area>\E一样被包裹,并且指定的字符被其他字符替换。\Q---\E被 Pattern 用来忽略其中的任何内容。 -
但是 AFAIK
\Qanythinghere\E\anythinghere在正则表达式世界.. 在这里查看docs.oracle.com/javase/tutorial/essential/regex/literals.html -
我不知道,我认为它需要结束标记,但我只希望 Pattern 忽略
anythinghere,而考虑外部的所有内容。 -
我上面给出的例子包含句号
.。该字符将被视为模式匹配器中的任何字符,除非它在 \Q\E内,否则它将被视为文字。