<script><!--不匹配--></script>
<!--要匹配-->
<span><!--要匹配--></span>
<textarea><!--不匹配--></textarea>
<script><xxx><!--不匹配--></xxx></textarea>
需要匹配在指定前套标签意外的 html 注释
1
yjmade 2015-04-02 21:39:03 +08:00
不要用正则来处理html或xml
|
3
frankzeng 2015-04-02 22:56:59 +08:00
python beautifulsoup或是xpath,怎么那么多人喜欢用正则表达式来解释html,这东西不好写啊
|
5
FrankFang128 2015-04-02 23:08:33 +08:00 via Android
永远不要用regex匹配HTML
|
6
hotcha0111 2015-04-02 23:18:47 +08:00
|
7
ETiV 2015-04-03 00:00:29 +08:00 via iPhone
问题是,解析库支持收集注释吗……
|
8
xcv58 2015-04-03 05:50:59 +08:00
|
9
river1007 2015-04-03 09:27:18 +08:00
来个PHP测试版本试试:
<?php $x = <<<ABC <script><!--不匹配--></script> <!--要a匹配--> <span><!--要b匹配--></span> <textarea><!--不匹配--></textarea> <script><xxx><!--不匹配--></xxx></textarea> ABC; preg_match_all('#^(?:<span><!--|<!--)([^>]+)(?:--></span>|-->)$#um', $x, $M, PREG_PATTERN_ORDER); var_dump($M); |
10
lianyue OP @river1007 不行 我的意思是 除了 <textarea> 和 <script> 标签内的注释 其他注释都匹配你的代码稍微内容改变下就不行了 <span>xxx<!--要匹配--></span>
|
11
TimLang 2015-04-03 10:10:23 +08:00
@xcv58 stackoverflow上有个很有名回复的很清楚,
http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 You can't parse [X]HTML with regex. Because HTML can't be parsed by regex. 不过现在的正则引擎支持引用自身,理论上只能解析html的。 |
12
xcv58 2015-04-03 11:21:02 +08:00
@TimLang 这个很对,正则本身就不是做这种事的工具。
哪怕是匹配个邮件地址也都是很困难: http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html 选对的工具很多时候能节省很多生命。 |
13
river1007 2015-04-03 11:28:46 +08:00
@lianyue
根据自己的需求改吧,和你本省的html标签也有关系,正则麻烦就用程序处理。 $x = <<<ABC <script><!--不匹配--></script> lsdf<!--要匹配a-->sdf <span>sdhh<!--要匹配b-->sdf</span> <textarea><!--不匹配--></textarea> <textarea><xxx><!--不匹配--></xxx></textarea> ABC; preg_match_all('#^(?!<script>|<textarea>).*?(?:<!--([^>]+)-->).*?(?!</textarea>|</script>)$#um', $x, $M, PREG_PATTERN_ORDER); var_dump($M); |