如何在不放入数组的情况下将PHP中的正则表达式组合在一起

时间:2017-01-12 15:40:21

标签: php arrays regex preg-match

我有这个正则表达式

if (preg_match('/(Seg|Segunda)? [aà] (Sex|sexta)?: (de)?\s?(\d{1,2})h?(\d{2})? [aà]s (.*?)h(\d{2})?/is', $obj["horario"], $hora))

如果我想在数组中使用on()内部的值,如$hora[1]$hora[2] ...等,问题是我不想把数组放在{{1像agrupations一样,因为我只想要数字expreisons,任何方式都不要把它们放进去?

1 个答案:

答案 0 :(得分:1)

仅以正则表达式模式捕获组会使PHP将项添加到生成的preg_match数组中。为避免将它们放在那里,只需将它们转换为非捕获的,在开始?:后添加(。如果该组不包含替换运算符,则可以删除括号((.*?) => .*?)。

例如:

if (preg_match('/(?:Seg|Segunda)? [aà] (?:Sex|sexta)?: (?:de)?\s?(\d{1,2})h?(\d{2})? [aà]s .*?h(\d{2})?/uis', $obj["horario"], $hora))

现在,只有数字值将作为数组中的单独项添加。

此外,由于模式中使用了非ASCII字符,因此最好传递u修饰符,使PCRE能够将输入字符串解析为Unicode字符串。