`

实战使用正则取特定标签多个属性值分步讲解

 
阅读更多

 



开发项目时客户要求新功能,受同事请求,帮他写个正则来取htm中特定标签中的多个属性值.


要求:

给定的html代码中要找出以下格式的代码,并取出各个属性值以供同事去处理

<p>[video width="320" height="240" url="http://www.youtube.com/embed/26EE3jG5thM"]</p>


思路:

从给定的代码来看,有固定的前缀和后缀,可以使用捕获型括号来取各个属性值.要注意属性的位置和特殊字符等


分析:

1.以<p>[video 开头,以]</p>结尾

2.各属性中间空格不确定

3.各属性的值可能是以单或双引号包含

4.url地址没有什么特殊字符


实现:

1.要匹配头 正则 <p>[video

2.要匹配 width="320" 正则  width=['"]\d+['"]

3.要匹配 height="240" 正则 height=['"](\d+)['"]

4.要匹配 url="http://www.youtube.com/embed/26EE3jG5thM" 正则 url=['"][:/\w]+)['"]

5.要匹配尾 正则 ]</p>


组装起来:  <p>[video width=['"]\d+['"] height=['"]\d+['"] url=['"][:/\w]+['"]]</p>


6.要匹配空格使用\s+  <p>[video\s+width=['"]\d+['"]\s+height=['"]\d+['"]\s+url=['"][:/\w]+['"]]</p>

7.要取出各属性值,使用捕获括号 <p>[video\s+width=['"](\d+)['"]\s+height=['"](\d+)['"]\s+url=['"]([:/\w]+)['"]]</p>


经测试,匹配不成功,仔细检查,发现对头和尾的特殊元素[]少了转义

改正 <p>\[video\s+width=['"](\d+)['"]\s+height=['"](\d+)['"]\s+url=['"]([:/\w]+)['"]\]</p>


8.要考虑属性的位置不确认性,使用或条件,但要注意使用或条件时不能破坏了捕获括号的值,再要用到括号都使用非捕获型

且仔细分析,三个属性都是 \s+属性 这种形式重复的,则可优化成 (\s+(属性1|属性2|属性3))+ 的形式

<p>\[video(?:\s+(?:width=['"](\d+)['"]|height=['"](\d+)['"]|url=['"]([:/\w]+)['"]))+\]</p>


将此正则交与同事,不久后回复,有一地址不能匹配,一看是url中多了问号字符.问他url地址是否为特定的,他也不能确认,于是,为了最大范围匹配,再改url的值匹配

最终正则为

<p>\[video(?:\s+(?:width=['"](\d+)['"]|height=['"](\d+)['"]|url=['"]([^'"]+)['"]))+\]</p>



java中的正则用法


Matcher m = Pattern.compile(reg, Pattern.CASE_INSENSITIVE).matcher(url);


        while (m.find()) {

          

            System.out.println("width="+m.group(1));// may be null

            System.out.println("height="+m.group(2));// may be null

            System.out.println("url="+m.group(3));// may be null

        }


其实该正则还是有优化的地方.仔细分析了其url来源,可以确定[video 是唯一的,则前后的<p>元素可以去除.

其元素是由软件生成,则位置,引号,空格都是统一的,则去除或条件,去除空格数量去除多条括号等

0
2
分享到:
评论

相关推荐

    易语言正则取Json数据

    在本主题中,“正则取Json数据”是指使用正则表达式从Json格式的数据中提取所需信息。Json(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于服务器与客户端之间的数据传输。 正则表达式...

    易语言正则取文本中间

    在易语言中,处理文本是常见的操作之一,特别是使用正则表达式来提取文本中的特定信息。"易语言正则取文本中间"功能就是针对这一需求设计的。 正则表达式(Regular Expression)是一种强大的文本处理工具,它能通过...

    易语言正则取网页文本内容

    正则表达式可以用来匹配特定的字符串模式,比如我们可以定义一个正则表达式来匹配段落标签`&lt;p&gt;`中的所有文本,或者特定类别的链接等。 3. **正则表达式基础**: 正则表达式由各种字符和特殊符号组成,如`.`匹配...

    Java正则表达式去除img标签的src内容

    java代码,从image标签中正则匹配取出src标签的内容,java代码,从image标签中正则匹配取出src标签的内容

    JS正则表达式的使用以video标签为例

    使用JS正则表达式,选取video元素的src属性的值,利用jQuery选取元素

    JavaScript正则表达式匹配 div style标签

    下面是一个简单的JavaScript示例代码,展示如何使用正则表达式匹配`&lt;div&gt;`和`&lt;style&gt;`标签: ```javascript // 示例字符串,包含div和style标签 var htmlString = '&lt;div&gt;这是一个div标签的内容。这是style标签中的...

    简易正则替换html字符串中的文字(不影响标签属性)

    不影响标签属性的简易正则替换html字符串中的文字(原理为使用正则取出html中&gt;&lt;之间的内容 然后使用循环从其中匹配对应的内容进行替换)

    易语言使用正则取逗号个数

    在易语言中,处理字符串是常见的任务之一,而“使用正则取逗号个数”则是对字符串进行分析的一个具体应用。这个主题涉及到的是如何通过正则表达式来统计一个字符串中逗号的个数。 正则表达式(Regular Expression)...

    Java基于正则表达式获取指定HTML标签指定属性值的方法

    要提取特定属性值,我们需要构造一个能匹配这种结构的正则表达式。 在提供的代码中,定义了一个名为 `MatchHtmlElementAttrValue` 的类,该类包含一个静态方法 `match`,这个方法接收3个参数:`source`(HTML源文本...

    PHP正则表达式抓取某个标签的特定属性值的方法

    php正则学了一些日子,抓了一些网站的数据,从而发现每次都自己写正则重新抓很麻烦,于是就想写一个抓取特定标签具有特定属性值的接口通用,直接上代码。 //$html-被查找的字符串 $tag-被查找的标签 $attr-被查找的...

    易语言正则取中间文本表达式源码

    易语言是一种基于中文编程的程序设计语言,旨在降低编程难度,让不懂英文的用户也能进行软件开发。...同时,标签"SanYe"可能指的是易语言的一个知名开发者或者社区,他们可能提供了很多易语言的学习资源和示例代码。

    Java使用正则表达式提取XML节点内容的方法示例

    Java使用正则表达式提取XML节点内容的方法示例 Java使用正则表达式提取XML节点内容的方法示例主要介绍了Java使用正则表达式提取XML节点内容的方法,结合具体实例形式分析了java针对xml格式字符串的正则匹配相关操作...

    易语言源码易语言正则取网页文本内容源码.rar

    易语言源码易语言正则取网页文本内容源码.rar 易语言源码易语言正则取网页文本内容源码.rar 易语言源码易语言正则取网页文本内容源码.rar 易语言源码易语言正则取网页文本内容源码.rar 易语言源码易语言正则取...

    易语言正则批量取中间文本

    在本主题“易语言正则批量取中间文本”中,我们将深入探讨如何使用易语言结合正则表达式来批量处理文本,从中提取出特定部分的信息。 正则表达式(Regular Expression)是处理字符串的强大工具,它通过预定义的模式...

    易语言使用正则取逗号个数源码

    首先,我们需要了解易语言中的正则表达式函数,如“正则表达式匹配”和“正则表达式全局匹配”,这两个函数可以帮助我们找到字符串中符合特定模式的子串。在计算逗号个数的情况下,我们关注的是匹配到的“,”字符。 ...

    易语言正则取网页文本内容源码

    如果初始化成功,我们会使用`正则表达式查找`函数寻找匹配的字符串,并通过`正则表达式获取子串`函数获取第一个捕获组的内容,即`&lt;h1&gt;`标签内的文本。最后,将提取到的标题和内容显示出来。 在实际应用中,`...

    易语言正则取中间文本表达式

    在易语言中,使用正则表达式可以实现对文本的精确操作,比如在一段文本中提取特定的中间部分。"取中间文本表达式"就是这样的功能,它能够从一个字符串中找出满足特定规则的中间部分。 "正则取中间文本表达式源码...

    正值表达式匹配html标签的属性值

    正则表达式是做文本解析工作必不...今天由于工作的需求,需要获取html标签的属性值,立即想到了正则表达式,标签如下: &lt;circle id="ap_test" cx="200" cy="2000" r="2" stroke="black" stroke-width="0" fill="r

Global site tag (gtag.js) - Google Analytics