hein 发表于 2014-1-10 22:10

一个正则忽略大小写的问题?

本帖最后由 hein 于 2014-1-10 22:27 编辑

VBS的正则在没有开启regex.IgnoreCase = True的情况下
下面这个正则对tag word mode等匹配可以忽略大小写,是那几个关键的字符起了作用?(匹配的是pixiv的地址.net/之后东西,我改成一些简单的判断语法之后,是不能判断到大写的,只能判断到小写,必须需要开启regex.IgnoreCase = True)
<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>我没学过正则,不带那没多括号、问号、冒号的还能看懂和修改,这个太复杂了

qieqie 发表于 2014-1-10 22:34

因为默认regex.IgnoreCase = True 吧。。
你加上regex.IgnoreCase = False看看
不懂vbs,猜的

vacuumsword 发表于 2014-1-10 22:36

我觉着要匹配大小写的话写个和(不分的话直接)大概可行。可以拿这个工具测试下。
http://www.gethifi.com/tools/regex

hein 发表于 2014-1-10 22:40

我上了regex.IgnoreCase = False
一样可匹配的
search.php?s_mode=s_tag&WORD=sega
你可以用JS试试看这个,这个正则JS是可以用的,JS应该是不加/gi应该就等同于regex.IgnoreCase = False吧

hein 发表于 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是小写的。

eph 发表于 2014-1-11 00:52

那个正则只是用 [^&]+ 匹配了 WORD=sega ,并没有匹配进 group 3 即 ((?:tag|word)=(?:[%\w\-]+\+?)+)
只有把 WORD 改成 word 才能匹配进 group 3

(顺便推荐下 RegexRubby 工具

88d25a3221430fa 发表于 2014-1-11 01:05

hein 发表于 2014-1-11 11:02

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

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

eph 发表于 2014-1-11 11:09

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

(?: ) 和 ( ) 的区别是不保存匹配,速度快一点。
页: [1]
查看完整版本: 一个正则忽略大小写的问题?