Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式匹配在句子中出现n次特定单词的句子_Regex - Fatal编程技术网

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

Regex 正则表达式匹配在句子中出现n次特定单词的句子,regex,Regex,我想匹配一个句子,如果这个句子中有一些特定的单词。下面是一段代码,我的SQL代码来自PHP,如果SQL语句中有4个或更多的JOIN关键字,我想匹配它。匹配的开始应该从等号开始,结束应该是分号 下面是PHP代码, 它不适用于下面的源文件,它选择了这么多行,实际上我只有一个查询,其中有四个连接 <?php $query = "SELECT users.id, com.com, com.dt ". "FROM com, users ". "WHERE com.user_id = users.us

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

下面是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
您必须在正则表达式中设置
{4}
,并以
结束正则表达式

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

$re = '/=\s*"\s*SELECT\s+(?:[^;]+?JOIN){4}[^;]+?;/i';
i、 e.匹配由空格包围的
=
,然后匹配
选择
,后跟一个或多个空格。在
之前加入一个或多个非分号字符,并将其分组<代码>{4}
将匹配分组文本中的4个和
[^;]+将匹配到
已找到

请注意比
不应出现在引用的文本中


在编辑器中,当我使用正则表达式时,它被正确选择,但当我在boost cpp中使用相同的正则表达式时,它只选择了第一行。在boost正则表达式引擎中使用时,新行是否缺少任何内容?我无法使用boost进行测试,但此正则表达式也会在多行中找到匹配项。可能是boost regex有一些标志表明它不适用于下面的源文件,它选择了这么多行,实际上我只有一个查询,其中有四个连接。你能告诉我你使用哪个编辑器来验证吗?你检查了链接吗?我正在regex101上测试regex,您还应该使用示例输入在那里进行测试。
$re = '/=\s*"\s*SELECT\s+(?:[^;]+?JOIN){4}[^;]+?;/i';