可以在 Java 的正则表达式量词中传递引用吗?

Posted

技术标签:

【中文标题】可以在 Java 的正则表达式量词中传递引用吗?【英文标题】:It is possible to pass a reference in a regex quantifier in Java? 【发布时间】:2016-03-23 17:02:34 【问题描述】:

我有一个编程练习,我们必须编写一个格式化方法,它将一个字符串作为参数,作为我们想要格式化的文本输入,一个整数作为我们想要的行的长度。

我们也有特定的规则,其中之一是:如果一个词比期望的长度长,它应该单独排成一行。

因此,一种简单的方法是使用正则表达式搜索一系列至少为 length 并且可能更多的非空白字符,并将其自身匹配的替换为两个 \ n 在每一边...

也许代码更清晰:假设我们想要的行长是 10

  String s = line.replaceAll("([ \t])(\\S10,)([ \t])", "\n$2\n");
  System.out.println(s);

这实际上工作正常。

我的问题是行长应该作为参数传递给format方法;所以我可以引用这个参数的唯一方法是使用它的引用。例如:

public static String format(String s, int length) ...

//缺少的东西

String s = line.replaceAll("([ \t])(\S长度,)([ \t])", "\n$2\n"); System.out.println(s);

但是在这种情况下它会返回一个错误:PatternSyntaxException

我的问题是:有没有办法使用对量词(而不是数字)的引用作为我们想要匹配的出现次数的参数?看起来它真的很有用,我很惊讶它似乎没有用。此外,看起来很多人都没有遇到过这个问题。

【问题讨论】:

【参考方案1】:

试试这个

String s = line.replaceAll("([ \t])(\S"+length+",)([ \t])", "\n$2\n");
System.out.println(s);

【讨论】:

以上是关于可以在 Java 的正则表达式量词中传递引用吗?的主要内容,如果未能解决你的问题,请参考以下文章

java正则表达式-量词

java正则表达式-量词

正则表达式给出边缘但不是铬的意外量词

弄懂 Java 正则表达式中的量词贪婪勉强独占和 String 的 matches 方法的底层个人感觉非常值得学习

在 JavaScript 正则表达式中使用 1+ 所有格量词时出现正则表达式错误

一起学习正则表达式量词与贪婪