2013-03-28 84 views
3

我正在寻找一个正则表达式,它必须在不同类型的HTML标记之间提取文本。正则表达式提取HTML标记之间的文本

对于离:

<span>Span 1</span> - O/P:跨度1

<div onclick="callMe()">Span 2</div> - O/P:跨度2

<a href="#">HyperText</a> - O/P:超文本

我发现这件特别的作品<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1> m here但这一个不起作用。

+1

请详细说明它是如何工作的。 – MikeM

+3

我想引用你到这个问题的传说中最佳答案:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – Philipp

+0

@MikeM它是不工作我的意思是,它没有给出预期的结果。它没有提取内容,而是显示整个HTML标签 – Sriram

回答

7

您的评论显示您忽略了您的正则表达式字符串中的反斜杠。

如果你想匹配小写字母添加a-z到字符类或使用Pattern.CASE_INSENSITIVE(或添加(?i)到正则表达式的开头)

"<([A-Za-z][A-Za-z0-9]*)\\b[^>]*>(.*?)</\\1>" 

如果标签内容可能包含换行符,然后使用Pattern.DOTALL或将(?s)添加到正则表达式的开头以打开dotall/singleline模式。

+0

谢谢你。是的,我错过了在表达式中添加反斜杠。我在这个表达式中寻找一个更多的选项,递归地检查html标签并最终获得这些标签之间的文本。 **例如:**'test'我希望这次我很清楚。 – Sriram

+0

哦!有一个投票:( – Sriram

+0

@Sriram。要获得内部标签,你将不得不在循环中使用上述正则表达式,但我认为你会更好地问一个新的问题。 – MikeM

-1

一个非常特殊的方式:

(<span>|<a href="#">|<div onclick="callMe\(\)">)(.*)(</span>|</a>|</div>) 

,但是,是的,这只会为那些3个实例工作。您需要使用HTML解析器。

+0

的情况下可以与任何的HTML标签之间的内容。不能说。 – Sriram

1

这应该满足您的需求:

<([a-zA-Z]+).*?>(.*?)</\\1> 

第一组包含的标签名,第二个值其间。

+0

如果存在多个标记,则reg表达式无效 – varpekv

相关问题