繁体   English   中英

如何在需要的地方使用RLIKE有效地结合LIKE和IN,*和*转义正则表达式字符?

[英]How can I use RLIKE to effectively combine LIKE and IN, *and* escape regex characters where needed?

我需要弄清楚如何在数据库中查询序列A序列B序列C ,但是由于种种限制,这很难导航。

先前的解决方案使用LIKE (例如SELECT * FROM Table WHERE Serial LIKE )-在搜索所有序列( % )或特定序列( Serial A )时效果很好。 但是,我很快发现INLIKE不能在MySql中合并,并且LIKE使用的通配符不够灵活,无法找到Serial ASerial BSerial C。

(注意:实际的序列有很大的不同,没有一致的约定-我知道可以使用%通配符找到与这些基本示例一样简单的序列)

我立即想到的是改用RLIKE但是某些序列被命名为B + 3东西,并且必须逃避才能找到。 在这里,我以为使用一种转义字符的方法,例如preg_quote() -但是其中存在系统结构方面的更多问题...


选择约束模块

通过查询数据库(例如SELECT DISTINCT Serial FROM Table )来填充组合框,用户可以从中选择一个序列,然后提交表单。 选定的序列作为GET值传递到下一页。

查看结果模块

$serial变量的内容作为参数传递给SQL查询,以在页面上生成结果。 $serial可以由View Results Module所属的页面填充,也可以由传递给该页面的GET值填充(如果该模块在include d之前尚未填充该值,并且没有GET值,将会引发错误)。


这种结构让我有些困惑。 如果这是由用户传递的,则使用RLIKEpreg_quote()来搜索序列似乎很简单。 preg_quote()可以在$serial作为参数传递之前使用,并且更新的( WHERE Serial RLIKE )查询应该可以按预期工作。 但是,我仍然不知道如何搜索多个序列。

如果我将$serial指定为(Serial A | Serial B | Serial C)preg_quote()将转义正则表达式字符并找不到它们。 但是,如果我不使用preg_quote() ,将找不到诸如B + 3序列,因为正则表达式字符未转义。


我非常感谢您对改进此问题的任何反馈-我已尽力尽可能清楚地解释了该问题,但由于上下文和约束的复杂性,使其很难处理。 谢谢。

转义子字符串,而不是最终的正则表达式。

"(" . preg_quote(serialA) . "|" . preg_quote(serialB) . "|" . preg_quote(serialC) . ")"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM