PHP 正则表达式:部分表达式的无大小写修饰符
PHP regexp: caseless modifier for part of the expression
我想知道是否可以在 PHP 中为表达式的一部分(而不是整个表达式)设置正则表达式修饰符。
我有以下代码:
$romanDigitsRegexp="(M{1,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})|M{0,4}(CM|C?D|D?C{1,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})|M{0,4}(CM|CD|D?C{0,3})(XC|X?L|L?X{1,3})(IX|IV|V?I{0,3})|M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|I?V|V?I{1,3}))";
$test = "Properties of Wide Bandgap li-vi Semiconductors VolUme1";
$volumeInfoFound = preg_match("/(\bv|Volume|\bvol)[\.| ]*(\d+|".$romanDigitsRegexp.")\b/i",$test, $matches);
此全局 /i 修饰符导致罗马数字出现问题。我想删除它,但同时捕捉到像 "volume"、"VOLUME"、"vol"、"VOL"、"Vol" 这样的词。是否可以只为这部分添加 \i 修饰符:
(\bv|Volume|\bvol)
您可以像这样切换 on/off 修饰符:
(?i)subpattern(?-i)
注意:内联修饰符的作用仅限于最里面的组。所以 ((?i)toto)abcd
不匹配 totoABCD
。并且一个组不能防止上层的修饰符:(?i)(toto)abcd
匹配 TOTOabcd
.
如果您想为包含在非捕获组中的子模式打开修饰符,您也可以使用此语法:
(?i:subpattern)
同样关闭:
(?-i:subpattern)
注意:很遗憾,您不能对原子组执行相同的操作。 (不能写(?i>subpattern)
)
对于这两种语法,您可以同时切换多个修饰符:
(?ix-m)
(?ix-ms:subpattern)
注意:写(?i-i)
并不是禁止的,但是没用
我想知道是否可以在 PHP 中为表达式的一部分(而不是整个表达式)设置正则表达式修饰符。
我有以下代码:
$romanDigitsRegexp="(M{1,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})|M{0,4}(CM|C?D|D?C{1,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})|M{0,4}(CM|CD|D?C{0,3})(XC|X?L|L?X{1,3})(IX|IV|V?I{0,3})|M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|I?V|V?I{1,3}))";
$test = "Properties of Wide Bandgap li-vi Semiconductors VolUme1";
$volumeInfoFound = preg_match("/(\bv|Volume|\bvol)[\.| ]*(\d+|".$romanDigitsRegexp.")\b/i",$test, $matches);
此全局 /i 修饰符导致罗马数字出现问题。我想删除它,但同时捕捉到像 "volume"、"VOLUME"、"vol"、"VOL"、"Vol" 这样的词。是否可以只为这部分添加 \i 修饰符:
(\bv|Volume|\bvol)
您可以像这样切换 on/off 修饰符:
(?i)subpattern(?-i)
注意:内联修饰符的作用仅限于最里面的组。所以 ((?i)toto)abcd
不匹配 totoABCD
。并且一个组不能防止上层的修饰符:(?i)(toto)abcd
匹配 TOTOabcd
.
如果您想为包含在非捕获组中的子模式打开修饰符,您也可以使用此语法:
(?i:subpattern)
同样关闭:
(?-i:subpattern)
注意:很遗憾,您不能对原子组执行相同的操作。 (不能写(?i>subpattern)
)
对于这两种语法,您可以同时切换多个修饰符:
(?ix-m)
(?ix-ms:subpattern)
注意:写(?i-i)
并不是禁止的,但是没用