php - wp PHP:使用带有双反斜杠的 REGEXP 的 MySQL8 查询。我可以避免使用 \\\\ 吗?
问题描述
由于我有超过 100,000 个帖子,我直接使用 MySQL 而不是 wp codex 来测试复杂的正则表达式以添加标签。为了以可视格式快速测试结果,我创建了一个直接使用相同 SQL 语句的 wordpress 搜索页面。这没有问题,除非有转义的正则表达式字符,例如\b
MySQL8 语句中的\\b
. 如果我在 PHP 中使用该确切语句,则无法识别双反斜杠。
例如(使用简单的正则表达式):
global $wpdb;
$sqlreal = "
SELECT wp_posts.*
FROM wp_posts
WHERE (wp_posts.post_title REGEXP '\\b(com(edy|ical)|doc(o|umentary))\\b'
OR wp_posts.post_content REGEXP '\\b(com(edy|ical)|doc(o|umentary))\\b' )
AND ( wp_posts.ID NOT IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (215) ) )
AND (wp_posts.post_type = 'post' OR wp_posts.post_type = 'xdays1')
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
";
$post_id = $wpdb->get_results($sqlreal);
$second_query = new WP_Query( array(
'post__in' => $post_id,
) );
ETC..
这不起作用,因为\\b
它\b
在 PHP 中出现。我知道如果我写了\\\\b
它就会起作用,但是我经常从我的 MySQL Workbench 快速剪切和粘贴,所以想知道是否有另一种方法,例如 PHP 函数,它\\b
只是作为原始文本出现,因为SQL 查询。
我尝试了各种方法,例如:
str_replace('\\\\', '\\\\\\\\', $sqlreal);
preg_quote($sqlreal);
mysqli_real_escape_string($mysqli, $sqlreal);
\\etc
Stackoverflow 中似乎有很多类似的问题,但我尝试过的方法都没有奏效。似乎必须有一个简单的解决方案?还是我不得不全部转换\\b
为\\\\b
?在为数百个片段剪切和粘贴 SQL 代码时,这样做很痛苦......
解决方案
我刚刚发现如果从文本文件中加载文本,那么它的原始和反斜杠是完整的。因此,如果我将 SQL 查询粘贴到外部文件中并将其加载到 PHP 中,file_get_contents("data.txt")
那么文本是未更改的原始文本,并且所有反斜杠都与原始文件完全相同。即使在 PHP 中存储为变量。其实这样更方便。尽管如此,我对任何其他方法都很感兴趣......
推荐阅读
- java - 制作静态数据源
- c - 与 C 中命令行参数的动态内存分配混淆
- wpf - 如何在 WPF 工具栏中更改 ToolBarOverflowPanel 的 WrapWidth 值
- selenium - 调用类导致的空异常
- c# - 如何找到我的文件控制台应用程序的文件路径,找不到文件显示
- hibernate - EntityManagerFactory 类型的不明确依赖项
- java - 我使用Hystrix(1.5.18),并设置参数ErrorThresholdPercentage=30,总是marksuccess时的断路状态切换
- android - 单击 RecyclerView 项目时,有几个项目会起作用
- html - 点击没有任何反应
- c++ - 具有整数溢出的递归斐波那契