为了账号安全,请及时绑定邮箱和手机立即绑定

$p = "|<[^>]+>(.*?)</[^>]+>|i";???????

$p = "|<[^>]+>(.*?)</[^>]+>|i";这个表达式如何理解?

正在回答

4 回答

$p = "|<[^>]+>(.*?)<[^>]+>|i";

背景:.*?表示最小匹配所有字符(拒绝贪婪匹配)

分析:
首先,<[^>]+>对应<li>,在方括号内部的^表示除了方括号内的原子以外的字符,即[^>]表示除了>以外的任意一个字符,+表示一个或者多个字符。
后面的</[^>]+>也是同理,只不过在前面多添加了一个/反斜杠。
最后,在此规则串中,分界符为||而不是//。因此,对于其中的</li>里面的/可以不使用转义字符,直接使用/。

初学,有错误请见谅~

5 回复 有任何疑惑可以回复我~
#1

Allengd

理解的很好
2017-05-25 回复 有任何疑惑可以回复我~

尖括号开始把我也忽悠住了,看了别人的回复才明白了。.*?匹配除换行符以外的0次或1次,懒惰模式

0 回复 有任何疑惑可以回复我~

<是左尖括号,[^>]指除了右尖括号以外的任何字符,+指匹配一次或多次,>指右尖括号,(.*?)是一种懒惰匹配模式,匹配任何可见字符,</[^>]+>同理,i指忽略大小写

3 回复 有任何疑惑可以回复我~

开头和结尾的|应该和/一样吧 因为html标签里面有/所以用|不用转义吗?? <匹配<, [^>]+匹配不是>的字符在[]里面^代表不是后面的字符额+表示匹配多次,>匹配>;(.*?)表示组 .匹配除换行符 \n 之外的任何单字符,*?代表非贪婪模式;后面的还开头的一个差不多匹配</xxxx>;i代表不区分大小写

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

$p = "|<[^>]+>(.*?)</[^>]+>|i";???????

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信