可以在 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 正则表达式中的量词贪婪勉强独占和 String 的 matches 方法的底层个人感觉非常值得学习