java - 这是正确的模式吗?

标签 java regex string

我正在尝试匹配一个模式并替换它。但是,程序没有退出,所以我怀疑正则表达式是错误的,因此它没有检测和替换正确的模式。这是我试图替换的模式:

Q_n(0;\al,\be,N)

下面是我的代码,应该使用正则表达式检测它并将其替换为:

\HahnQ{n}@{0}{\al}{\be}{N}

谢谢!

while(line.contains("Q_n")){
    line.replaceAll("Q_n\\(([^;]+?);([^,]+?),([^,]+?),([^\\)]+?)\\)", "\\HahnQ{n}@{$1}{$2}{$3}{$4}");
}

最佳答案

我怀疑您的问题是您忘记了字符串是不可变的,因此像 replaceAll 这样的方法不会更改调用它的原始字符串,而是创建另一个字符串。

此外,您还使用了 while,但 replaceAll 将替换您出现的所有内容 模式所以 if 应该足够了。

另一件事:如果 "\\H" 应该表示文字 \H 那么你需要将其写为 "\\\\H" 因为 \ 也是替换中的特殊字符,所以如果你想创建文字 \ 它需要被替换为另一个 \\需要写成 "\\\\" (就像在正则表达式中一样)`。

if(line.contains("Q_n")){
    line = line.replaceAll("Q_n\\(([^;]+?);([^,]+?),([^,]+?),([^\\)]+?)\\)", "\\\\HahnQ{n}@{$1}{$2}{$3}{$4}");
}

顺便说一句,您不需要让量词不情愿 ([^;]+?); 因为 [^;] 永远不会匹配 ;,所以与 ([^;]+); 相同(同样适用于 ([^,]+?),)。

此外,您不必在字符类 [] 内转义 )

([^\\)]+?)\\)
   ^^     ^^
   |       +-- correct, `)` is outside of any character class `[...]`
   +---------- redundant, character class doesn't consider `)` as metacharacter

关于java - 这是正确的模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23898066/

相关文章:

java - 如何禁用 Hibernate 的 SHOW WARNINGS?

java - 使用来自另一个对象(线程)的数据重新绘制 JPanel

javascript - 使用 JavaScript 解析日志

regex - R中是否有用于正则表达式的原始字符串?

regex - 需要帮助使用 Perl 修复此正则表达式代码吗?

Android:从视频 URI 创建视频缩略图

java - 抽屉布局类未找到错误

java - SQLSyntaxErrorException : ORA-00900: invalid SQL statement using Java

c++ - 我的程序出现 abort() 错误,但由于它是程序的加载部分,我无法调试它?

java - 为什么 String 列表没有 forEach 方法?