首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有人能解释如何设计一个可以工作的Regex,而不管在HTML标记之后/之前是否有一个空格

有人能解释如何设计一个可以工作的Regex,而不管在HTML标记之后/之前是否有一个空格
EN

Stack Overflow用户
提问于 2015-05-11 01:33:52
回答 1查看 43关注 0票数 0

需要使用Regex而不是解析器从HMTL/XML页面中提取属性,但不能使Regex <span class='street-address'> (?<Street>.*)从下面的文本(与此完全相同的行距)在Rubular中提升2346 21st Ave NE

代码语言:javascript
复制
<span class='street-address'>
2346 21st Ave NE
</span>

另外,我的Regex只有在压缩文本并且在第一个HTML标记之后和最后一个HTML标记之前有空格时才能工作。如果我更改Regex以消除这些空格,则跳过空格HTML标记。我想让Regex尽可能的充满活力。

无论在HTML标记或换行之前是否有空格,我如何构造一个起作用的Regex?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-11 01:37:21

正如您在几乎所有与xhtml和regex相关的答案中所发现的,除非您真正知道涉及哪些html内容,否则不应该使用regex解析html。我会使用html解析器代替。

您只需使用s (单行标志)并使用惰性量词。

代码语言:javascript
复制
<span class='street-address'>(?<Street>.*?)<\/span>

工作演示

还可以使用内联s标志,如下所示:

代码语言:javascript
复制
(?s)<span class='street-address'>(?<Street>.*?)<\/span>
 ^--- here

另一方面,如果您不想使用regex标志,可以使用一个众所周知的技巧,方法是使用两个相反的集合,如[\s\S]

代码语言:javascript
复制
<span class='street-address'>(?<Street>[\s\S]*?)<\/span>

我只想让你知道,这个把戏意味着:

代码语言:javascript
复制
\s     --> matches whitespace (spaces, tabs). 
\S     --> matches non whitespace (same as: [^\s])
[\s\S] --> matches whitespace or non whitespace (so... everything)

你可以用这个技巧来处理你想要的任何东西,比如:

代码语言:javascript
复制
[\s\S] whitespace or non whitespace
[\w\W] word or non word
[\d\D] digit or non digit
[\b\B] word boundary or non word boundary
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30158488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档