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 中。其实这样还是比较方便的。
尽管如此,我还是很期待其他任何方法...
由于我有超过 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 中。其实这样还是比较方便的。
尽管如此,我还是很期待其他任何方法...