Regex 正则表达式匹配在句子中出现n次特定单词的句子
我想匹配一个句子,如果这个句子中有一些特定的单词。下面是一段代码,我的SQL代码来自PHP,如果SQL语句中有4个或更多的JOIN关键字,我想匹配它。匹配的开始应该从等号开始,结束应该是分号 下面是PHP代码, 它不适用于下面的源文件,它选择了这么多行,实际上我只有一个查询,其中有四个连接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
<?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';