【问题标题】:Regex expression help java正则表达式帮助java
【发布时间】:2016-09-21 19:34:40
【问题描述】:
我需要这个正则表达式的帮助来将String="55555 <italic>bold-italic</italic>" 分隔成m.group[0]="55555" m.group[1]="italic" and m.group[2]="bold-italic。目前这个表达式<(.*)>(.*)</\\1> 将italic 和bold-italic 分开,但我在添加数字部分时遇到问题。
谢谢
【问题讨论】:
标签:
java
regex
expression
【解决方案1】:
当不得不处理正则表达式时,我喜欢使用https://regex101.com/ 来尝试不同的可能性。
它在技术上不是为 Java 设计的,但运行良好(有时您必须插入/删除转义字符才能使其工作)。
对于您的示例,m.group[0]="55555" 上的正则表达式应该类似于 ([1-9]*),具体取决于您想要准确允许的值以及该组是否应该具有长度限制。
【解决方案2】:
您可以使用:(\d+)\s*(<\w+>)(.*)<\/\w+>
演示here
Java 代码:
public static void main (String[] args) throws java.lang.Exception
{
String pattern = "(\\d+)\\s*(<\\w+>)(.*)<\\/\\w+>";
String input = "55555 <italic>bold-italic</italic>";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(input);
if ( m.find())
{
System.out.println("First group : " + m.group(1));
System.out.println("Second group : " + m.group(2));
System.out.println("Third group : " + m.group(3));
}
}
输出:
First group : 55555
Second group : <italic>
Third group : bold-italic