<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); |