如何使这个正则表达式不区分大小写?

时间:2014-07-24 04:11:38

标签: regex

如何使这个正则表达式不敏感?

preg_match('/[\w\d\.]+\.(com|org|ca|net|uk|co|it)/', $string, $matches)

3 个答案:

答案 0 :(得分:1)

将不区分大小写的修饰符(?i)添加到模式的开头

(?i)[\w\d\.]+\.(com|org|ca|net|uk|co|it)

你的代码看起来像,

preg_match('/(?i)[\w\d\.]+\.(com|org|ca|net|uk|co|it)/', $string, $matches)

答案 1 :(得分:1)

可能在最后添加i

preg_match('/[\w\d\.]+\.(com|org|ca|net|uk|co|it)/i', $string, $matches)

答案 2 :(得分:1)

两种方式

:一种。模式应用于整个模式后的修饰符

示例:

$match_or_not = preg_match("~somepattern~i",$subject); 

PHP Manual说:

  

我(PCRE_CASELESS)       如果设置了此修饰符,则模式中的字母将匹配大写和小写字母。


<强> B中。内联修饰符可以打开和关闭不区分大小写

您可以像这样将它应用于整个字符串 - 但您不必:

$match_or_not = preg_match("~(?i)somepattern~",$subject);

您可以将其关闭,如下所示:

$match_or_not = preg_match("~(?i)some (?-i)pattern~",$subject);

为避免重新开启,您可以在括号内暂时将其关闭

$match_or_not = preg_match("~(?i)some (?-i:other) pattern~",$subject);

来自PCRE doc:

  

PCRE_CASELESS,PCRE_MULTILINE,PCRE_DOTALL和设置   可以更改PCRE_EXTENDED选项(与Perl兼容)   在模式内由一系列Perl选项字母括起来   之间 ”)”。选项字母是

     对于PCRE_DOTALL的PCRE_MULTILINE,我的PCRE_CASELESS是

PCRE_CASELESS   x表示PCRE_EXTENDED

     

例如,(?im)设置无外壳,多行匹配。也是   可以通过在连字符前加上字母来取消设置这些选项,   以及(?im-sx)组合的设置和取消设置   PCRE_CASELESS和PCRE_MULTILINE同时取消设置PCRE_DOTALL和   PCRE_EXTENDED也是允许的。如果在和之前出现了一封信   在连字符后,该选项未设置。

     

PCRE特定选项PCRE_DUPNAMES,PCRE_UNGREEDY和PCRE_EXTRA   可以使用与Perl兼容选项相同的方式进行更改   字符J,U和X分别为。

     

当其中一个选项更改发生在顶层时(即不是   在子模式括号内),更改适用于其余部分   随后的模式。如果更改是在开始时进行的   一个模式,PCRE将其提取到全局选项中(它会   因此显示在pcre_fullinfo()函数提取的数据中。

     

子模式中的选项更改(有关说明,请参见下文)   子模式)仅影响其后面的子模式的那部分,   所以

     

(A(λI)b)中ç

     

匹配abc和aBc而没有其他字符串(假设PCRE_CASELESS是   不曾用过)。通过这种方式,可以使选项具有不同   设置在模式的不同部分。任何改变都在一个   替代方案继续进入后续分支内   子模式。例如,

     

(A(I)C |?c)中

     

匹配“ab”,“aB”,“c”和“C”,即使匹配“C”时   在选项设置之前放弃第一个分支。这是因为   选项设置的效果发生在编译时。那里将会是   否则会有一些非常奇怪的行为。