标题: [文本处理] 已解决! 以<script开头,以</script>结尾,中间包含a.js的正则表达式 [打印本页]
作者: 星尘 时间: 2020-7-30 22:36 标题: 已解决! 以<script开头,以</script>结尾,中间包含a.js的正则表达式
本帖最后由 星尘 于 2020-7-31 11:50 编辑
以<script开头,以</script>结尾,中间包含a.js的正则表达式,能匹配换行符,非贪婪模式。
已解决!
作者: ivor 时间: 2020-7-31 06:41
复制代码
作者: 星尘 时间: 2020-7-31 08:12
本帖最后由 星尘 于 2020-7-31 08:17 编辑
不行啊,中间要包含a.js这个字符串,如果写成这样<script[\s\S]*?a\.js[\s\S]*?<\/script>,是贪婪模式的
作者: qixiaobin0715 时间: 2020-7-31 08:47
如果支持环视的话,贪婪模式又如何不能使用呢:- <script((?s)((?!</script>).)*a\.js((?!</script>).)*)</script>
复制代码
作者: qixiaobin0715 时间: 2020-7-31 08:55
关键是你用的是哪一种正则引擎。不同的引擎,对元字符及模式的支持度会有很大的不同。
作者: qixiaobin0715 时间: 2020-7-31 09:10
回复 3# 星尘
斜杠一般不需要转义吧!
作者: 星尘 时间: 2020-7-31 09:37
回复 5# qixiaobin0715 - asdddsadsdsas
- <script type="text/javascript" src="/res.js"></script>
- <script type="text/javascript">
- checkMobile();
- function checkMobile() {
- var ua = navigator.userAgent.toLowerCase();
- a.js
- if( str1.indexOf("type=public")!=-1 || str1.indexOf("type=news")!=-1){
-
- </script>
- <script type="text/javascript" src="/res.js"></script>
- asddasdadsdsadsa
复制代码
比如我用这段代码做测试,匹配不到啊
作者: 星尘 时间: 2020-7-31 09:37
回复 6# qixiaobin0715
我新手,不太熟悉
作者: 星尘 时间: 2020-7-31 09:39
回复 4# qixiaobin0715
应该不支持,测试了下没有效果。在notepad里面测试是成功的
作者: 星尘 时间: 2020-7-31 09:49
我有一个文件夹,里面包含很多子目录和html文件,我需要把包含指定字符串的一段代码给正则掉,我用的UltraReplace(超级替换工具),但你那个匹配不到,可能是你说的正则引擎原因把
作者: qixiaobin0715 时间: 2020-7-31 10:09
回复 7# 星尘
你想匹配的是那(几)段文本?
作者: 星尘 时间: 2020-7-31 10:16
本帖最后由 星尘 于 2020-7-31 10:22 编辑
回复 11# qixiaobin0715 - asdddsadsdsas
- <script type="text/javascript" src="/res.js"></script>
- <script type="text/javascript">
- checkMobile();
- function checkMobile() {
- var ua = navigator.userAgent.toLowerCase();
- a.js
- if( str1.indexOf("type=public")!=-1 || str1.indexOf("type=news")!=-1){
-
- </script>
- <script type="text/javascript" src="/res.js"></script>
- asddasdadsdsadsa
复制代码
比如在这段代码中匹配- <script type="text/javascript">
- checkMobile();
- function checkMobile() {
- var ua = navigator.userAgent.toLowerCase();
- a.js
- if( str1.indexOf("type=public")!=-1 || str1.indexOf("type=news")!=-1){
-
- </script>
复制代码
解决20元红包感谢,其他方法也行,只要能达到目的
作者: qixiaobin0715 时间: 2020-7-31 10:34
回复 12# 星尘
没用过UltraReplace,可能是不支持(?s),看看菜单选项里是否有类似“.号可匹配换行符”的选项。若有勾选,上面正则去掉“(?s)和最外层括号”试试;不行的或试试下面正则(效率可能要低一些):- <script((?!</script>)(.|\n))*a\.js((?!</script>)(.|\n))*</script>
复制代码
作者: WHY 时间: 2020-7-31 11:18
UltraEdit 可以这样,正则模式选 Perl- <script(?:(?!</script>)[\s\S])*a\.js(?:(?!<\/script>)[\s\S])*</script>
复制代码
作者: 星尘 时间: 2020-7-31 11:50
回复 14# WHY
这个可以,解决了,谢了
作者: WHY 时间: 2020-7-31 11:55
刚试了下 UltraReplace 绿色版 5.03,连 \s、\S 都不支持,楼主是如何做到的?
UltraEdit 比它强太多了,也支持批量替换。
作者: qixiaobin0715 时间: 2020-7-31 16:21
处理文本我一般用EmEditor,功能尚可,习惯而已。偶尔用Notepad++。
作者: netdzb 时间: 2020-8-4 13:32
回复 4# qixiaobin0715
代码解释一下,学习一下,谢谢!
作者: qixiaobin0715 时间: 2020-8-4 15:00
本帖最后由 qixiaobin0715 于 2020-8-4 15:35 编辑
1.(?s)——开启“点号匹配换行符模式”
2.(?!</script>)——顺序否定环视
与^、$类似,只表示位置而实际不匹配任何字符;通俗的说,“站”在此位置向后看一看,其后不能是字符串“</script>”。
3.(?!</script>).——任意一个字符,但是要符合从其左侧向后看不能是字符串“</script>”的条件。
4.((?!</script>).)*——从其左侧向后看不能是字符串“</script>”的任意字符的集合。也即是集合中的每个字符分别都要符合以上条件。
开始不对,现已修正。
作者: qixiaobin0715 时间: 2020-8-4 15:26
如果标签内不含字符"<"还可以用下列非精确的表达式匹配:- <script[^<]*a\.js[^<]*</script>
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |