问题描述
|
这是输入的HTML字符串:
Johnny:我最喜欢的颜色是粉红色
莎拉:我最喜欢的颜色是蓝色
约翰尼:让我们交换性别吗?
莎拉:好!
p>
我想正则表达式匹配上面的粗体部分。基本上,找到\“> \”(或行首)和\“:\”之间的任何匹配项
我将此正则表达式设置为“ 0”,但无法正常工作,将以下部分加粗,包括
标记。我不想匹配任何HTML标签:
Johnny:我最喜欢的颜色是粉红色
莎拉:我最喜欢的颜色是蓝色
约翰尼:让我们交换性别吗?
莎拉:好!
p>
我正在使用Java,其代码如下:
Matcher m = Pattern.compile(\"`(?>)[^>](.+):`\",Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL).matcher(string);
解决方法
以下代码应该工作:
String str = \"<p>Johnny Smith: My favorite color abc: is pink<br />\" +
\"Sarah: My favorite color is dark: blue<br />\" +
\"Johnny: Let\'s swap: genders?<br />\" +
\"Sarah: OK: sure!<br />\" +
\"</p>\";
Pattern p = Pattern.compile(\"(?:>|^)([\\\\w\\\\s]+)(?=:)\",Pattern.MULTILINE);
Matcher m = p.matcher(str);
while(m.find()){
System.out.println(m.group(1));
}
输出值
Johnny Smith
Sarah
Johnny
Sarah
,如果您想在单词后跟\':\'进行匹配,则\“ \\ w +:\”应该足够了。但是,如果要包含\'> \'可能性,可以尝试:
String s = \"<p>Johnny: My favorite color is pink<br />\" +
\"Sarah: My favorite color is blue<br />\" +
\"Johnny: Let\'s swap genders?<br />\" +
\"Sarah: OK!<br />\" +
\"</p>\";
Pattern p = Pattern.compile(\"[>]?(\\\\w+):\");
Matcher m = p.matcher(s);
while(m.find()){
System.out.println(m.start()+\" : \"+m.group(1));
}