当前位置:  开发笔记 > 编程语言 > 正文

RegEx匹配没有特定属性的<a> html标签

如何解决《RegEx匹配没有特定属性的<a>html标签》经验,为你挑选了1个好方法。

在Java中我需要匹配 没有href属性的字符串标记.例如,在以下字符串中:

text link1 text link2 text

它不应该匹配link1(因为它包含href)但它应该匹配link2(因为它不包含href).

我设法构建RegEx以匹配我的标签:

]*>(.*?)

但我无法弄清楚如何用href消除标签

(我知道我可以使用HTML解析器等,但我需要使用RegEx执行此操作.



1> Ro Yo Mi..:
描述

注意正则表达式,]*因为这些也将匹配其他有效的html标签,这些标签aor或者开头

.另外简单地查找字符串的存在href是不够好的,因为该字符串可能在另一个属性的值内,或者像或者是另一个属性的一部分,如

这个表达式将:

匹配所有锚标签... 不包含href属性.

它会强制标记名称a,而不是一个标签,该标签简单地用字母开头a

忽略属性,这些属性也包含href嵌入在属性名称中的子字符串,如有效hreflang='en'或组成Attributehref="some value".

忽略所有格式正确的属性的值部分内的所有字符 bogus='href=""'

)(?!(?:[^>=]|=(['"])(?:(?!\1).)*\1)*?\shref=['"])[^>]*>.*?<\/a>

在此输入图像描述

扩展

)匹配open标签并确保标签名称后面的空格或紧密括号,这会强制名称a而不是其他名称

(?! 如果我们在此标记中找到一个href,那么这个类型的标记不是我们正在寻找的标记

(?: 启动非捕获组以遍历标记内的所有字符

[^>=] 匹配阻止正则表达式引擎离开标记的所有非标记关闭字符,以及阻止引擎继续盲目匹配所有字符的非等号

| 要么

=(['"])匹配等号后跟开放的双引号或单引号.引用被捕获到组2中,以便以后可以正确配对

(?:(?!\1).)* 匹配所有不是与开放引用匹配的近引号的字符

\1 匹配正确的关闭报价

)*? 关闭非捕获组,并根据需要重复,直到

\shref=['"]匹配所需的href属性.在\s=["']确保属性名称就是HREF

) 关闭负向前瞻

[^>]*>.*?<\/a> 匹配整个字符串从打开到关闭

Java代码示例:

输入文本

RADIO text link1 text link2 text

如果您希望在替换函数中使用它来删除非href-anchor标记,那么只需替换所有匹配项.

import java.util.regex.Pattern;
import java.util.regex.Matcher;
class Module1{
  public static void main(String[] asd){
  String sourcestring = "source string to match with pattern";
  Pattern re = Pattern.compile(")(?!(?:[^>=]|=(['\"])(?:(?!\\1).)*\\1)*?\\shref=['\"])[^>]*>.*?<\\/a>
",Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
  Matcher m = re.matcher(sourcestring);
  int mIdx = 0;
    while (m.find()){
      for( int groupIdx = 0; groupIdx < m.groupCount()+1; groupIdx++ ){
        System.out.println( "[" + mIdx + "][" + groupIdx + "] = " + m.group(groupIdx));
      }
      mIdx++;
    }
  }
}

火柴

$matches Array:
(
    [0] => Array
        (
            [0] => link2
        )

    [1] => Array
        (
            [0] => 
        )

)

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有