我变得非常难过,试图弄清楚如何在另一个字符串中查找字符串,其含义可以根据前面或后面的字符而改变。
我提供了一个选项列表,该列表位于分隔的字符串中,具体取决于所提供的选项取决于适用的数据。
所以我有一个列表,其中包含以下内容:
A1|B2|C3|D4|E5|F6
然后我需要过滤另一个使用+
,-
,()
和/
组合的数据集,以确定适用的选项。
例如,我可能会有以下内容:
+A1-(C3/D4)
:仅当存在A1
并且C3
或D4
不存在时才适用
+(A1/B2)
:仅当A1
或B1
存在时才适用
我发现自己遇到的问题是,根据要求或不要求,这可能会导致相当混乱,可能不会直接在+
或-
之后。
例如,我可以拥有以下内容:
-A1+(B2/C3/D4)/-E5+(F6/G7/H8)
转换为:
Must not have A1 but have either B2, C3 or D4
OR
Must not have E5 but have either F6, G7 or H8
基本上我需要查看这些选项是直接在+
之前还是在()
+()
之类的-
之后,然后还要查看反向是否为真(所以之前)通过-()
或SET @option = 'E5'
SELECT *
FROM data
WHERE (
options LIKE '%+' + @option + '%'
OR options LIKE '%+(%' + @option + '%)%'
)
AND (
options NOT LIKE '%-' + @option + '%'
OR options LIKE '%-(%' + @option + '%)%'
)
)。
我正在考虑使用像下面这样的LIKE语句块。
+A1-(B2/C3/D4)/-E5+(F6/G7)
但是,我担心在某些情况下这可能会失败。
例如,如果数据行上的选项列表是:
F6
由于技术上 -(%F6%)
位于npm cache clean --force
所以它不适用,即使它应该适用。
我希望这是有道理的。我确信这很简单,但是由于我对正则表达式不太熟悉,目前它让我有点难过。
任何指针都会非常感激。