我在 PHP 中使用以下正则表达式( https://regex101.com/r/Kt9sNj/1 )来获取目录第三级中的所有文件:
/^(\/[^\/]*){1,4}\/?$/m
那么如果我有以下数据:/home/myuser/folder_example/first_file.txt
/home/myuser/folder_example/second_file.txt
/home/myuser/folder_example/third_file.txt
我得到:first_file.txt
second_file.txt
third_file.txt
我尝试在包含 json 对象数组的 MySQL 查询中使用它。我的查询是:
SELECT data->'$.files' AS File
FROM table
WHERE user = 'myuser';
我得到:["/home/myuser/folder_example/first_file.txt","/home/myuser/folder_example/second_file.txt","/home/myuser/folder_example/third_file.txt"]
但是当我在我的 sql 查询中使用那个正则表达式时:SELECT data->'$.files' AS File
FROM table
WHERE user = 'myuser'
AND data->'$.files' REGEXP '^(\/[^\/]*){1,4}\/?$';
我需要得到这个(该目录下的所有文件):["first_file.txt","second_file.txt","third_file.txt"]
它不起作用。你知道为什么吗?
最佳答案
函数REGEXP如果模式匹配,则返回 1,并且将返回完整匹配,因为模式确实与示例字符串匹配。
在 your pattern您正在重复一个捕获组,它将捕获组 1 中迭代的最后一个值,但它仍然包含您不希望在输出中出现的前导正斜杠。
您可能会做的是匹配第一个 /
,然后使用量词 {3}
以 /
结尾的部分精确重复 3 次使用非捕获组。
然后捕获组 1 中的文件名,并使用 '$1'
引用该组在替换中使用 REGEXP_REPLACE
^/(?:[^/]*/){3}(\S+\.[^.\s]+)$
Regex demo | Mysql with replace demo
关于mysql - 提取存储在 MySQL 字段中的第三级文件夹结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65110366/