找回密码
 立即注册
搜索
查看: 1729|回复: 8

[软件] 一个正则忽略大小写的问题?

[复制链接]
     
发表于 2014-1-10 22:10 | 显示全部楼层 |阅读模式
本帖最后由 hein 于 2014-1-10 22:27 编辑

VBS的正则在没有开启regex.IgnoreCase = True的情况下
下面这个正则对tag word mode等匹配可以忽略大小写,是那几个关键的字符起了作用?(匹配的是pixiv的地址.net/之后东西,我改成一些简单的判断语法之后,是不能判断到大写的,只能判断到小写,必须需要开启regex.IgnoreCase = True)

  1. <P>regex.Pattern ="(\w+)\.php(?:\?(?:(?:((?:id|illust_id)=\d+)|((?:tag|word)=(?:[%\w\-]+\+?)+)|(type=(?:illust|user|reg_user))|(mode=(?:medium|all)|rest=(?:show|hide)|s_mode=(?:s_tc|s_tag))|(p=\d+)|[^&]+)(?:&|$))*)?"</P>
复制代码
我没学过正则,不带那没多括号、问号、冒号的还能看懂和修改,这个太复杂了
回复

使用道具 举报

     
发表于 2014-1-10 22:34 | 显示全部楼层
因为默认regex.IgnoreCase = True 吧。。
你加上regex.IgnoreCase = False看看
不懂vbs,猜的
回复

使用道具 举报

     
发表于 2014-1-10 22:36 | 显示全部楼层
我觉着要匹配大小写的话写个[A-Z]和[a-z](不分的话直接[A-Za-z])大概可行。可以拿这个工具测试下。
http://www.gethifi.com/tools/regex
回复

使用道具 举报

     
 楼主| 发表于 2014-1-10 22:40 | 显示全部楼层
我上了regex.IgnoreCase = False
一样可匹配的
search.php?s_mode=s_tag&WORD=sega
你可以用JS试试看这个,这个正则JS是可以用的,JS应该是不加/gi应该就等同于regex.IgnoreCase = False吧
回复

使用道具 举报

     
 楼主| 发表于 2014-1-10 22:56 | 显示全部楼层
本帖最后由 hein 于 2014-1-10 22:58 编辑

<script type="text/javascript">
var s1="search.php?s_mode=s_tag&WORD=sega";
var patrn1=/(\w+)\.php(?:\?(?:(?:((?:id|illust_id)=\d+)|((?:tag|word)=(?:[%\w\-]+\+?)+)|(type=(?:illust|user|reg_user))|(mode=(?:medium|all)|rest=(?:show|hide)|s_mode=(?:s_tc|s_tag))|(p=\d+)|[^&]+)(?:&|$))*)?/;
var patrn2=/(\w+)\.php\?s_mode=s_tag&(WORd)=sega/;
var patrn3=/(\w+)\.php\?s_mode=s_tag&(WORd)=sega/i;
alert(s1+"\r\n"+patrn1+"\r\n"+patrn1.test(s1));
alert(s1+"\r\n"+patrn2+"\r\n"+patrn2.test(s1));
alert(s1+"\r\n"+patrn3+"\r\n"+patrn3.test(s1));
</script>

可以试一下这个JS的测试,第一个alert就是不开忽略大小写可以匹配,后两个我写了个简单的正则,然后在不开启忽略的情况下,无法识别大写的word
我想知道第一个正则到底是哪个东西起到这作用,明明(?:tag|word)中的word是小写的。
回复

使用道具 举报

发表于 2014-1-11 00:52 | 显示全部楼层
那个正则只是用 [^&]+ 匹配了 WORD=sega ,并没有匹配进 group 3 即 ((?:tag|word)=(?:[%\w\-]+\+?)+)
只有把 WORD 改成 word 才能匹配进 group 3

(顺便推荐下 RegexRubby 工具
回复

使用道具 举报

头像被屏蔽
发表于 2014-1-11 01:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
 楼主| 发表于 2014-1-11 11:02 | 显示全部楼层
eph 发表于 2014-1-11 00:52
那个正则只是用 [^&]+ 匹配了 WORD=sega ,并没有匹配进 group 3 即 ((?:tag|word)=(?:[%\w\-]+\+?)+)
只有 ...

整个正则我基本看懂了,不过?:具体是什么意思?我试了一遍,感觉这个是用来乱须序匹配如果存在的。
回复

使用道具 举报

发表于 2014-1-11 11:09 来自手机 | 显示全部楼层
hein 发表于 2014-1-11 11:02
整个正则我基本看懂了,不过?:具体是什么意思?我试了一遍,感觉这个是用来乱须序匹配如果存在的。 ...

(?: ) 和 ( ) 的区别是不保存匹配,速度快一点。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2025-9-7 17:21 , Processed in 0.049806 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表