我的目标是从连接子句中检索别名。
这是我的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
答案 0 :(得分:0)
您不需要所有这些捕获组。
/rqd_evenements (?:as )?\K[\w-]+/i
如果只想提取一个子字符串,请使用preg_match()来访问[0]元素。
也许您的模式在实时查询字符串上不起作用,因为您的换行符与点元字符不匹配。 s
标志可以解决此问题。
使用preg_replace:
/.*rqd_evenements (?:as )?([\w-]+).*/is
替换为$1
。