当前位置: 首页 > 面试题库 >

Java,在正则表达式中转义(使用)引号

苏运良
2023-03-14
问题内容

我试图在Java中使用以下正则表达式,应该匹配任何正则表达式lang="2-char-lang-name"

String lang = "lang=\"" + L.detectLang(inputText) +"\"";
shovel.replaceFirst("lang=\"[..]\"", lang);

我知道正则表达式会将单个斜杠解释为斜杠,而不是转义字符(因此我的代码不起作用),但是如果我转义了斜杠,"将不会再转义并且我会得到一个语法错误。

换句话说,如何"在正则表达式中包含a ?"lang=\\"[..]\\""将无法正常工作。我也尝试过三个斜杠,但也没有任何匹配。

我也知道您不使用regex解析XML /
HTML的一般规则。(并且shovel是XML)但是,我要做的就是查找langXML的前30个字符以内的属性,并且我想替换它。在这种情况下使用正则表达式真的不是一个好主意吗?我认为使用DOM不会更好/更有效。


问题答案:

三个斜杠是正确的(\\+ \"变为\+ "= \")。( 更新
:实际上,事实证明这甚至没有必要。似乎也可以使用单个斜杠。)问题是您对[..]; 的使用。这些[]符号表示“此处的[..]任何字符”
(因此仅表示“任何字符”)。

删除[],您应该会得到想要的:

String ab = "foo=\"bar\" lang=\"AB\"";
String regex = "lang=\\\"..\\\"";
String cd = ab.replaceFirst(regex, "lang=\"CD\"");
System.out.println(cd);

输出:

foo="bar" lang="CD"


 类似资料:
  • 我正在搜索正则表达式-"。(冲突的副本。"。我为此写了以下代码 但我有个例外 异常在线程"main"中java.util.regex.Pattern Syn的异常:索引15附近的未关闭组。( 我知道编译器认为是模式组的开始。我试图通过添加来逃避),但这不起作用。 有人能告诉我怎么逃走吗?

  • 昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?

  • 问题内容: 我正在尝试用比Java regex语法更简单的通配符来匹配用户输入。假设有一个通配符A。然后,用户将输入输入字符串: 并将“ test”与搜索字符串匹配: 为此,我将搜索字符串中的通配符字符串替换为,因此我可以将通配符与常规正则表达式的捕获组进行匹配。但是,我仍然希望转义特殊字符。如果我使用引号,则正则表达式将不再起作用,因为带有正则表达式含义的字符()也被引用了: 是否有一种内置的方

  • 问题内容: 当匹配某些字符(例如换行符)时,可以使用正则表达式“ \\ n”或仅使用“ \ n”。例如,以下将字符串拆分为行数组: 但是以下内容同样适用: 我的问题: 上面两个是 完全 一样地工作,还是有细微的差别?如果是后者,能否举个例子,说明您得到不同的结果? 还是仅在[可能/理论]表现上有所不同? 问题答案: 在当前情况下没有区别。通常的字符串转义序列是在单个反斜杠的帮助下形成的,然后有效的

  • 转义字符串以在正则表达式中使用。 使用 String.replace() 来转义特殊字符。 const escapeRegExp = str => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); escapeRegExp('(test)'); // \\(test\\)

  • 问题内容: 我正在尝试在另一个字符串中替换字符串“ []”的第一个匹配项: aString.replaceFirst(“ []”,“等等”); 我收到错误:java.util.regex.PatternSyntaxException:索引1 []附近的未封闭字符类 [和]显然是元字符,但是当我尝试使用\来转义它们时,eclipse抱怨说这不是有效的转义序列。 我看过但找不到,我想念什么? 谢谢 问