如果句子中有一些特定的单词,我想匹配一个句子。下面是来自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单词查询的查询。
答案 0 :(得分:1)
要匹配JOIN
,您必须在正则表达式中使用{4}
范围,并使用;
结束正则表达式。
您可以使用此正则表达式:
$re = '/=\s*"\s*SELECT\s+(?:[^;]+?JOIN){4}[^;]+?;/i';
即。匹配由空格包围的=
,然后匹配SELECT
,后跟1个或多个空格。 JOIN
之前的一个或多个非半冒号字符并对其进行分组。 {4}
将匹配4个分组文本,[^;]+?;
将匹配,直到找到;
。
请注意,;
不应出现在引用文字中。