使用 preg_match 时的 PHP 分隔符


PHP delimiters when using preg_match

我有以下代码行。

if (!preg_match('^(' . $value . ')(;q=[0-9]''.[0-9])?$', $this->browser_languages[$i]) && isset($this->catalog_languages[$key])) {     
    $this->language = $this->catalog_languages[$key];
    break 2;

我知道我需要将分隔符添加到代码中,但是每当我尝试添加它们时,都会出现解析错误。

请谁能帮忙。

谢谢

你想要'!^(' . $value . ')(;q=[0-9]''.[0-9])?$!'我已经将!添加为正则表达式中的第一个字符,最后一个字符。

通过以这种方式分隔字符串,可以添加模式修饰符。

带分隔符:

!preg_match('/^(' . $value . ')(;q=[0-9]''.[0-9])?$/', $this->browser_languages[$i]);

并引用$value

preg_quote($value, '/');

完整代码:

if (!preg_match('/^(' . preg_quote($value, '/'). ')(;q=[0-9]''.[0-9])?$/', $this->browser_languages[$i]) && isset($this->catalog_languages[$key])) {     
    $this->language = $this->catalog_languages[$key];
    break 2;

您需要在正则表达式的开头和结尾添加分隔符:

'/^(' . $value . ')(;q=[0-9]''.[0-9])?$/'

您可能还需要使用preg_quote($value)以防值中包含特殊字符,这可能会弄乱您的正则表达式并导致错误。