
更具体地说,我正在尝试找到位于开始和结束脚本标记之间的字符串“findthis”(不带引号). RegEx应该能够匹配字符串多行.
例:
<HTML> <head> <script> var x = 1; if (x < 1) { x = 100; } var y = 'findthis'; // Should be matched </script> </head> <body> <script> var a = 2; </script> <h1>Welcome!</h1> <p>This findthis here should not be matched.</p> <script> var b = 'findthis too'; // Should be matched,too. </script> <div> <p>This findthis should not be matched neither.</p> </div> </body></HTML> 到目前为止我尝试的是以下((?s)启用多行):
(?s)\<script\>.*?(findthis).*?\</script\>
这里的问题是,当脚本结束标记出现时,它不会停止搜索“findthis”.这就是为什么在Visual Studio 2013中,它还会在搜索结果中的正文开头标记之后显示脚本元素.
任何人都可以帮助我摆脱这个RegEx地狱吗?
解决方法 您可以使用此正则表达式来避免匹配< script>标签:<script>((?!</?script>).)*(findthis)((?!</?script>).)*</script>
或者,更有效的原子分组:
<script>(?>(?!</?script>).)*(findthis)(?>(?!</?script>).)*</script>
我假设我们不想既不打开也不打算关闭< script>之间的标签,所以,我正在使用/? insIDe(?>(?!< /?script>).)*,只是为了避免任何其他格式错误的代码.我再次(findthis)之后重复它,以便我们只匹配未跟随< script>的字符.或< / script>.
在Expresso中进行了测试,略微修改了输入(我在任何地方添加<和>来模拟损坏):
总结以上是内存溢出为你收集整理的RegEx只有在特定HTML元素中出现时才匹配字符串全部内容,希望文章能够帮你解决RegEx只有在特定HTML元素中出现时才匹配字符串所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)