java - 用参数/标记替换正则表达式字符串

标签 java regex string

我有一个我应该维护的代码库的代码片段。

String number = "1";
String value = "test";
String output = "";

output = value.replaceAll("\\Q{#}", number);

output 的值保持为“test”,我只能猜测这段代码应该做什么:number 的值应该附加到值(value)。也许是这样的:test1 或将值完全替换为数字。

我发现 \\Q 是正则表达式选项,用于引用 \\E 之前的所有内容,但没有 \\E。无论如何,它根本没有做任何事情,我想知道我是否监督了一些事情?

最佳答案

您的正则表达式仅匹配文字{#}。确实,在 \Q 之后,模式被认为具有文字符号(\Q 之后的所有符号都被“引用”或“转义”),并且 \E 停止这种转义/引用,如果缺少它,整个模式将被引用/转义。

如果您的value变量包含test{#}值,则{#}将被数字替换。

参见this demo :

String number = "1";
String value = "test{#}";
String output = "";
output = value.replaceAll("\\Q{#}", number);
System.out.println(output); // => test1

请注意,如果没有 \Q,您的正则表达式 ({#}) 将抛出 java.util.regex.PatternSyntaxException: Illegal repetition错误,因为 Java 正则表达式引擎不够“智能”,无法消除大括号的歧义(PCRE、JS、.NET 可以轻松猜测,因为内部没有数字,所以它不是限制/绑定(bind)量词)。

关于java - 用参数/标记替换正则表达式字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37539971/

相关文章:

php - +是什么?在正则表达式中是什么意思?

string - 如何比较两个列表并找出它们之间的差异?

c# - 将 Javascript 日期解析为 C# DateTime

java - 修改Java字节码中的一个字符串(jar)

java - Java 中的标点符号正则表达式

javascript - 从字符串中删除回车符和空格

c++ - 如何从文件中识别数据类型

java - 我正在尝试理解建筑模式,但我与导演之间存在问题

java - 如何使用最新的Java SE版本?

java - move C++ 内存而不复制