Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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
Php MySQL&;正则表达式:只匹配整个单词还是跳过URL?_Php_Mysql_Regex - Fatal编程技术网

Php MySQL&;正则表达式:只匹配整个单词还是跳过URL?

Php MySQL&;正则表达式:只匹配整个单词还是跳过URL?,php,mysql,regex,Php,Mysql,Regex,我使用下面的查询进行搜索 SELECT pg_id AS ID, pg_url AS URL, pg_title AS Title, pg_content_1 AS Content_1, pg_content_2 AS Content_2, parent_id AS Parent_id, EXTRACT(DAY FROM pg_created) AS Date, EXTRACT(MONTH FROM pg_created) AS Month, EXTRACT(YEAR FROM pg_cre

我使用下面的查询进行搜索

SELECT
pg_id AS ID, 
pg_url AS URL,
pg_title AS Title,
pg_content_1 AS Content_1,
pg_content_2 AS Content_2,
parent_id AS Parent_id,

EXTRACT(DAY FROM pg_created) AS Date,
EXTRACT(MONTH FROM pg_created) AS Month,
EXTRACT(YEAR FROM pg_created) AS Year

FROM root_pages

WHERE root_pages.pg_cat_id = '2'
AND root_pages.parent_id != root_pages.pg_id
AND root_pages.pg_hide != '1'
AND root_pages.pg_url != 'cms'
AND root_pages.pg_content_1 REGEXP '[[:<:]]".$search."[[:>:]]'
OR root_pages.pg_content_2 REGEXP '[[:<:]]".$search."[[:>:]]'

ORDER BY root_pages.pg_created DESC
选择
pg_id作为id,
pg_url作为url,
pg_标题作为标题,
pg_内容_1作为内容_1,
pg_内容_2作为内容_2,
父项id作为父项id,
摘录(从创建的pg_开始的日期)作为日期,
提取(创建的pg_中的月份)为月份,
摘录(创建的pg_中的年份)为年份
从根目录页面
其中root_pages.pg_cat_id='2'
和root_pages.parent_id!=root_pages.pg_id
和root_pages.pg_hide!='1'
和root_pages.pg_url!='cms'
和root_pages.pg_content_1 REGEXP'[[::]]
或root_pages.pg_content_2 REGEXP'[[::]]
按根目录排序\u pages.pg\u创建的描述
我工作正常,但我不希望它在URL地址中搜索关键字,例如

如果我搜索关键字home,查询将在下面的URL中搜索任何与“home”匹配的内容,并将其作为结果返回:

主页/

家庭-事务/doc_centre/xx.pdf

如何修复查询,使其不匹配URL中的关键字,或者只匹配整个单词

谢谢

尝试将此实现用于MySQL

CREATE FUNCTION strip_tags( x longtext) RETURNS longtext
LANGUAGE SQL NOT DETERMINISTIC READS SQL DATA
BEGIN
    DECLARE sstart INT UNSIGNED;
    DECLARE ends INT UNSIGNED;
    SET sstart = LOCATE('<', x, 1);
    REPEAT
        SET ends = LOCATE('>', x, sstart);
        SET x = CONCAT(SUBSTRING( x, 1 ,sstart -1) ,SUBSTRING(x, ends +1 )) ;
        SET sstart = LOCATE('<', x, 1);
    UNTIL sstart < 1 END REPEAT;
return x;
END;
CREATE FUNCTION strip_标记(x longtext)返回longtext
SQL非确定性语言读取SQL数据
开始
声明sstart INT未签名;
声明结束INT无符号;
设置sstart=LOCATE(“”,x,sstart);
集合x=CONCAT(子串(x,1,ssstart-1),子串(x,ends+1));
设置sstart=LOCATE('编辑:

找到了我自己的解决方案,它似乎工作正常,因为它跳过了使用http://

SELECT
pg_id AS ID, 
pg_url AS URL,
pg_title AS Title,
pg_content_1 AS Content_1,
pg_content_2 AS Content_2,
parent_id AS Parent_id,

EXTRACT(DAY FROM pg_created) AS Date,
EXTRACT(MONTH FROM pg_created) AS Month,
EXTRACT(YEAR FROM pg_created) AS Year

FROM root_pages

WHERE root_pages.pg_cat_id = '2'
AND root_pages.parent_id != root_pages.pg_id
AND root_pages.pg_hide != '1'
AND root_pages.pg_url != 'cms'
AND root_pages.pg_content_1 LIKE '%".$search."%'
OR root_pages.pg_content_2 LIKE '%".$search."%'

AND root_pages.pg_content_1 NOT LIKE '%http://%'
AND root_pages.pg_content_2 NOT LIKE '%http://%'

ORDER BY root_pages.pg_created DESC

根据应用程序的工作方式,首先删除URL可能更有意义。随着数据越来越大,在多行上运行任何正则表达式都会大大降低速度。因此,与其每次搜索都执行正则表达式,不如在插入数据之前执行一次正则表达式。@colin:谢谢提示。不过,我认为strip_标记不起作用就像我去掉这个url一样-作为剩余的字符串,查询仍在搜索该字符串中的关键字。谢谢提示。我认为strip_标记不会起作用,尽管我去掉了这个url一样-作为剩余字符串,查询仍在搜索该字符串中的关键字。是的,正如我所说,这不太可靠。但是,您可以修改该函数还可以从文本中删除url模式。再次感谢。我应该将mysql函数保存在哪里并调用它?我是否必须执行类似$sql=“创建函数条_标记…”的操作,然后通过$result=$connection->query($sql)调用它首先,您需要将函数存储在数据库中。这是通过在服务器上执行CREATE function查询来完成的(在MySQL workbench或PHPMyAdmin等客户机中)。当它被存储时,您只需在查询中使用该函数,就像我在示例中所做的那样。(该函数将一直存储在数据库中,直到您决定删除它为止)。
SELECT
pg_id AS ID, 
pg_url AS URL,
pg_title AS Title,
pg_content_1 AS Content_1,
pg_content_2 AS Content_2,
parent_id AS Parent_id,

EXTRACT(DAY FROM pg_created) AS Date,
EXTRACT(MONTH FROM pg_created) AS Month,
EXTRACT(YEAR FROM pg_created) AS Year

FROM root_pages

WHERE root_pages.pg_cat_id = '2'
AND root_pages.parent_id != root_pages.pg_id
AND root_pages.pg_hide != '1'
AND root_pages.pg_url != 'cms'
AND root_pages.pg_content_1 LIKE '%".$search."%'
OR root_pages.pg_content_2 LIKE '%".$search."%'

AND root_pages.pg_content_1 NOT LIKE '%http://%'
AND root_pages.pg_content_2 NOT LIKE '%http://%'

ORDER BY root_pages.pg_created DESC