正则表达式匹配在句子中出现n次特定单词的句子

时间:2015-07-07 10:25:05

标签: regex

如果句子中有一些特定的单词,我想匹配一个句子。下面是来自PHP的一段代码MY SQL代码,如果它有4个或更多JOIN关键字,我想匹配SQL语句。比赛的开始应该从等号开始,结尾应该是分号

下面是PHP代码, 它不适用于下面的源文件,它选择这么多行实际上我只有一个查询有四个连接

<?php
$query = "SELECT users.id, com.com, com.dt ".
"FROM com, users ".
"WHERE com.user_id = users.user_id ".
"LIMIT 10";

$query = "SELECT cd.id, sf.cap
   la.val as last_sort

FROM cd AS cd
JOIN ci AS ci
ON cd.id = ci.id
JOIN sf AS sf
ON ci.field_id = sf.f_id
JOIN ci as name
ON cd.ci = ln.c_id 
JOIN ca as ad 
ON cd.cid = ad.c_id
AND ln.fld = 7
  WHERE cd.progress = 1"
$result = mysql_quy($queryr));
?>

我尝试使用下面的正则表达式,它总是停在最后一个JOIN字。

=[[:space:]]*"[[:space:]]*SELECT[a-zA-Z0-9\"\,\.\= \n\_\*]+JOIN

但是上面的正则表达式的问题是它选择了有2个JOIN单词查询的查询。

1 个答案:

答案 0 :(得分:1)

要匹配JOIN,您必须在正则表达式中使用{4}范围,并使用;结束正则表达式。

您可以使用此正则表达式:

$re = '/=\s*"\s*SELECT\s+(?:[^;]+?JOIN){4}[^;]+?;/i';

即。匹配由空格包围的=,然后匹配SELECT,后跟1个或多个空格。 JOIN之前的一个或多个非半冒号字符并对其进行分组。 {4}将匹配4个分组文本,[^;]+?;将匹配,直到找到;

请注意,;不应出现在引用文字中。

RegEx Demo