wp PHP:一个 MySQL8 查询,使用带有双反斜杠的 REGEXP。我可以避免使用 \\\\ 吗?

wp PHP: a MySQL8 query using REGEXP with double backslash. Can I avoid using \\\\?

由于我有超过 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,
) );

等..

这不起作用,因为 \b 在 PHP 中显示为 \b。我知道如果我写 \\b 那么它会起作用,但我经常从我的 MySQL Workbench 快速剪切和粘贴所以想知道是否有另一种方法,例如 PHP 函数使 \b 只作为原始文本出现,就像 SQL 查询一样。

我尝试过各种方法,例如:

str_replace('\\', '\\\\', $sqlreal);


preg_quote($sqlreal);


mysqli_real_escape_string($mysqli, $sqlreal);

\etc

在 Whosebug 中似乎有很多类似的问题,但 none 我试过的方法都有效。似乎必须有一个简单的解决方案?还是我坚持必须将所有 \b 转换为 \\b? 为数百个片段剪切和粘贴 SQL 代码时,这样做很痛苦...

我刚发现如果文本是从文本文件加载的,那么它的原始和反斜杠是完整的。因此,如果我将 SQL 查询粘贴到一个外部文件中,并使用 file_get_contents("data.txt") 将其加载到 PHP 中,那么文本是未经修改的原始文本,并且所有反斜杠都与原始文本完全相同。即使作为变量存储在 PHP 中。其实这样还是比较方便的。 尽管如此,我还是很期待其他任何方法...