正则表达式可在Regexr工具中使用,但不能在PHP中使用

时间:2019-01-16 16:48:38

标签: php regex database preg-replace pcre

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

这是我的RegEx:/(.*)rqd_evenements (?:as )([a-z_\-A-Z]+)(.*)/i

示例字符串:

  

左联接rqd_term_relationships ON(rqd_posts.ID = rqd_term_relationships.object_id)JOIN rqd_icl_translations t ON rqd_posts.ID = t.element_id和t.element_type = CONCAT('post_',rqd_posts.INevtype.CON_type post_id = ID

我做一个preg_replace:

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

结果是:

  

左联接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

1 个答案:

答案 0 :(得分:0)

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

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

如果只想提取一个子字符串,请使用preg_match()来访问[0]元素。

也许您的模式在实时查询字符串上不起作用,因为您的换行符与点元字符不匹配。 s标志可以解决此问题。


使用preg_replace:

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

替换为$1