如何使这个正则表达式不敏感?
preg_match('/[\w\d\.]+\.(com|org|ca|net|uk|co|it)/', $string, $matches)
答案 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);
我(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”时 在选项设置之前放弃第一个分支。这是因为 选项设置的效果发生在编译时。那里将会是 否则会有一些非常奇怪的行为。