gpt4 book ai didi

php mysql 在标签之间提取文本

转载 作者:行者123 更新时间:2023-11-29 18:34:49 26 4
gpt4 key购买 nike

我有一个 wiki 数据库,其中的页面位于“body”中,其中包含 [[GridRef:St12341234]] 的一般文本。我正在尝试创建一个 mysqli 语句来仅提取位置信息 [[Gridref:ST12341234] ]] 或将来的 [[PostCode:OX1099A]] 或 [[LATLON:10000,10000]]。到目前为止,我有一个带有完整页面文本(正文)的页面名称(标签)列表。

SELECT tag, body FROM `wikka_pages`  
WHERE body LIKE '%[[GridRef:%'
ORDER BY `wikka_pages`.`tag` ASC

但是它还包括正文中的所有其他文本。我不知道如何使用 SUBSTRING_INDEX() REGEX 或其他函数来过滤正文。一旦大部分文本被拉出,我就可以使用 php 将其操作为传递给谷歌地图或其他的东西。所以我希望得到一些输出,例如

`| tag | body |
---------------
| Box | GridRef:ST12341234 |
| hill | GridRef:SK12341233 |
| car | PostCode:OX1099 |
-----------------------------`

谢谢

最佳答案

您无法在 native MySQL 中使用正则表达式进行提取。在应用程序中使用正则表达式执行此操作可能是最简单的,但也可以使用 locatesubstring 来完成。

SELECT tag, 
substring(body, (locate('[[', body)+2), locate(']]', substring(body, (locate('[[', body)+ 3))))
FROM content
WHERE body LIKE '%[[GridRef:%'

substring 的第三个参数是长度,我们为 0 位置添加 3,并添加 2 个 ]]

演示:http://sqlfiddle.com/#!9/d43e1/1

如果您要返回整行,则可以在 PHP 中使用类似的内容,

preg_match('/\[{2}(.+?)\]{2}/', 'sometext[[GridRef:St12341234]]moretext', $match);
print_r($match);

演示:https://3v4l.org/7TMKf

正则表达式演示:https://regex101.com/r/WhalH7/1/

请注意,如果您的行有多个 [[]] 配对,您将需要更具体地定位括号。

关于php mysql 在标签之间提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45389174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com