Regex 在 Regexr 工具中工作,但在 PHP 中不工作

Regex working in Regexr tool, but not in PHP

我的目标是从连接子句中检索别名。

这是我的正则表达式:/(.*)rqd_evenements (?:as )([a-z_\-A-Z]+)(.*)/i

示例字符串:

LEFT JOIN rqd_term_relationships ON (rqd_posts.ID = rqd_term_relationships.object_id) JOIN rqd_icl_translations t ON rqd_posts.ID = t.element_id AND t.element_type = CONCAT('post_', rqd_posts.post_type) INNER JOIN rqd_evenements AS ev ON ev.post_id = ID

我做一个 preg_replace:

preg_replace($regex, '', $sample_string);

这导致:

LEFT JOIN rqd_term_relationships ON (rqd_posts.ID = rqd_term_relationships.object_id) JOIN rqd_icl_translations t ON rqd_posts.ID = t.element_id ev

预期结果:ev

令我困惑的是它在 RegExr 中工作:https://regexr.com/46hil

您不需要所有这些捕获组。

/rqd_evenements (?:as )?\K[\w-]+/i

如果您只想提取子字符串,请使用 preg_match() 作为对 [0] 元素的访问。

也许您的模式不适用于您的实时查询字符串,因为您的换行符与点元字符不匹配。 s flag 可以解决这个问题。


与preg_replace:

/.*rqd_evenements (?:as )?([\w-]+).*/is

替换为