我想从achore标签中找到href。所以我使用了正则表达式
<a\s*[^>]*\s*href\s*\=\s*([^(\s*|\>)]*)\s*[^>]*>\s*Text\s*<\/a>
Options = Ignorecase + singleline
实施例
<a href="/abc/xzy/pqr.com" class="m">Text</a>
So Group[1]="/abc/xzy/pqr.com"
但如果内容像
那样 <a href="/abc/xzy/ //Contains new line
pqr.com" class="m">Text</a>
so Group[1]="/abc/xzy/
所以我想知道如果内容包含新行(\ r \ n)
,如何获取“/abc/xzy/pqr.com”答案 0 :(得分:0)
您的捕获组有点奇怪:[^(\s*|\>)]*
是一个字符类,它将匹配任何不是(
的字符,字符类\s
和星号{{1}等等。
然而,你可以做的是在捕获组之前和之后加上引号:
*
然后将字符类更改为<a\s*[^>]*\s*href\s*\=\s*"([^(\s*|\>)]*)"\s*[^>]*>\s*Text\s*<\/a>
^ ^
(不是引号):
[^"]
这就是说,最好使用正确的html解析器而不是正则表达式。只是因为你可以忘记很多不同的场景,所以制作一个合适的正则表达式会更加繁琐,但如果你确定你的数据是如何通过的,那么正则表达式可能是获得你需要的快速方法。
如果你想在某些情况下考虑单引号而没有引号,你可以尝试这样做:
<a\s*[^>]*\s*href\s*\=\s*"([^"]*)"\s*[^>]*>\s*Text\s*<\/a>
^^^^
这个正则表达式有这个部分而不是<a\s*[^>]*\s*href\s*=\s*((?:[^ ]|[\n\r])+)\s*[^>]*>\s*Text\s*<\/a>
,它接受非空格和换行符(并且以及以后的回车)。请注意,(?:[^ ]|[\n\r])+
包含空格,制表符,换行符和换页符。