2

我不确定这是否可行,但是一旦匹配成功,我需要一种方法来用运行时动态声明的字符串替换我的正则表达式中指定的编号组的值。

给定一个简单的案例,例如...

(/)?([A-Za-z0-9])?(/)?$

我希望能够插入第 2 组的替代品。

我目前正在使用 Java 的 Matcher 类。

4

3 回答 3

6

我不确定这是否可以做到......

是的,这是可能的。请参见下面的示例。

我希望能够插入第 2 组的替代品。

这个演示“插入”了.toUpperCase第 2 组的版本作为替代。

import java.util.regex.*;

class Main {
    public static void main(String... args) {
        String input = "hello my name is /aioobe/ and I like /patterns/.";
        Pattern p = Pattern.compile("(/)([A-Za-z0-9]+)(/)");
        Matcher m = p.matcher(input);
        StringBuffer sb = new StringBuffer();
        while (m.find()) {
            String rep = m.group(1) + m.group(2).toUpperCase() + m.group(3);
            m.appendReplacement(sb, rep);
        }
        m.appendTail(sb);
        System.out.println(sb);
    }
}

印刷:

hello my name is /AIOOBE/ and I like /PATTERNS/.
于 2010-10-20T19:21:07.667 回答
2

是的,这是可行的。查看我对这个问题的回答,看看如何。事实上,这个问题可能应该作为重复关闭。

您需要稍微更改正则表达式。我不能确切地告诉你你想做什么,所以我不能给出任何细节,但至少你应该把所有这些问号移到组内。

(/)?([A-Za-z0-9])?(/)?$  // NO

(/?)([A-Za-z0-9]?)(/?)$  // YES

但它仍然会匹配目标字符串末尾的空子字符串,因为除了锚点之外所有内容都是可选的,$. 这真的是你的意思吗?

于 2010-10-20T18:55:29.857 回答
0

返回正则表达式搜索的值并将其保存到变量中,然后使用正则表达式搜索结果作为查找目标和动态声明的字符串作为替换,对主字符串进行替换。

真正简化的概念:

String testString = "Hello there";
//String substring = *Do your regex work here*
if(substring.length() > 0) {
   testString.replace(substring, dynamicallyGeneratedString); 
}
于 2010-10-20T17:54:32.750 回答