向 RE 专家提出的问题:考虑以下 Perl 脚本:
my @lines = (
"Once upon a time in a galaxy far, far away, there lived\n",
"this _idiot_ trying to _mark up_ a few lines of\n",
"marked down text using yet another _language_.\n");
foreach (@lines) {
s|_(.+?)_|<em>$1</em>|g;
print
}
% perl [aboveScript] 的输出是
Once upon a time in a galaxy far, far away, there lived
this <em>idiot</em> trying to <em>mark up</em> a few lines of
marked down text using yet another <em>language</em>.
我正在尝试用 Java 来实现这一点。我想出的类(class)如下。它有效,并且我得到与上面相同的输出,但我很确定这不是执行此操作的方法。我的问题 - 您将如何实现“parseLine()”方法?
import java.util.*;
import java.util.regex.*;
public class Reglob {
private final static Pattern emPattern = Pattern.compile ("_(.+?)_");
public void parseLine (String[] lines) {
for (String line : lines) {
List<Integer> bList = new ArrayList<Integer>(),
eList = new ArrayList<Integer>();
Matcher m = emPattern.matcher (line);
int n = 0;
while (m.find()) {
// System.out.println ("Match indices: " + m.start() + ", " + m.end());
bList.add (m.start());
eList.add (m.end());
n++;
}
if (n == 0) {
System.out.println (line);
} else {
String s = line.substring (0, bList.get(0));
for (int i = 0 ; i < n-1 ; i++) {
s += "<em>"
+ line.substring(1+bList.get(i),eList.get(i)-1)
+ "</em>" + line.substring (eList.get(i), bList.get(i+1));
}
s += "<em>"
+ line.substring(1+bList.get(n-1),eList.get(n-1)-1)
+ "</em>" + line.substring (eList.get(n-1), line.length());
System.out.println (s);
}}}
public static void main (String[] args) {
String[] lines = {
"Once upon a time in a galaxy far, far away, there lived",
"this _idiot_ trying to _mark up_ a few lines of",
"marked down text using yet another _language_."};
new Reglob().parseLine (lines);
}}
最佳答案
这是 Perl 脚本的 Java 等效项:
public class Main {
public static void main(String[] args) {
String[] lines = {
"Once upon a time in a galaxy far, far away, there lived\n",
"this _idiot_ trying to _mark up_ a few lines of\n",
"marked down text using yet another _language_.\n" };
for(String line : lines) {
String output = line.replaceAll("_(.+?)_", "<em>$1</em>");
System.out.print(output);
}
}
}
它输出:
Once upon a time in a galaxy far, far away, there lived
this <em>idiot</em> trying to <em>mark up</em> a few lines of
marked down text using yet another <em>language</em>.
关于java - 如何在 Java 正则表达式中使用反向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25440338/