需要在MySQL中进行REGEXP匹配吗
我想匹配如下所示的字符串:需要在MySQL中进行REGEXP匹配吗,sql,mysql,regex,Sql,Mysql,Regex,我想匹配如下所示的字符串: [lang_de]Hallo![/lang_de][lang_en]Hello![/lang_en]HeyHo[lang_es]Hola![/lang_es] 如果存在未包含在lang_标记中的文本(在本例中:HeyHo),我希望匹配返回true。它也可以定位在字符串的开头或结尾 空格不应匹配,例如,[lang\u de]Tisch[/lang\u de][lang\u en]表[/lang\u en]不应导致匹配 我不能使用lookahead或lookback,因
[lang_de]Hallo![/lang_de][lang_en]Hello![/lang_en]HeyHo[lang_es]Hola![/lang_es]
如果存在未包含在lang_标记中的文本(在本例中:HeyHo
),我希望匹配返回true。它也可以定位在字符串的开头或结尾
空格不应匹配,例如,[lang\u de]Tisch[/lang\u de][lang\u en]表[/lang\u en]
不应导致匹配
我不能使用lookahead或lookback,因为MySQL似乎不支持这一点
有什么建议吗?试试这个正则表达式:
'^ *[^[ ]|\\[/lang_[a-z]{2}\\] *[^[ ]'
您可以这样使用它:
select *
from <table>
where <field> regexp '^ *[^[ ]|\\[/lang_[a-z]{2}\\] *[^[ ]'
选择*
从…起
其中regexp'^*[^[]\\[/lang\[a-z]{2}\\]*[^[]'
它应处理所有情况:
- 以前
- 之后
- 中间的
- 不是空白
- 我最好的尝试是:
SELECT * FROM tbl1 WHERE ('[lang_de]Hallo![/lang_de][lang_en]Hello![/lang_en]HeyHo[lang_es]Hola![/lang_es]' NOT REGEXP '^(\\[lang_[a-z]{2}\\][^\[]*\\[\\/lang_[a-z]{2}\\])*$')
让我们知道您的进展情况。此正则表达式的问题在于*运算符太贪婪,因此无法处理提供的测试数据。因此,将发生的情况是,您的第一个[lang_u]将匹配[lang_ude],第二个[lang_u]将一直匹配到[lang_e]。因此,它不会重复,并认为它匹配成功。但它将解决字符串开头或结尾的文本问题。是的,这是真的,我总是被咬。*这是真的,经常发生在我身上…学习regexp非常困难。我无法真正完全理解您的REGEX(请容忍我,我是noobish),但它似乎有效;)你是我的ROCKSTAR!如果这是你选择并为你工作的解决方案,你应该这样标记。它应该在投票向上/向下指示器旁边。我将尝试解释一下:正则表达式的第一部分(直到“|”字符的所有内容)将尝试匹配非空白非['字符位于字符串的开头,因此如果字符串以'A[lang..开头,它将返回'A'的真正原因。接下来,我们将寻找一个结束符[/lang]标记,然后检查与之前相同的正则表达式(即不是空格,不是'[')。这将导致'…[/lang en]A[lang..”匹配,因为结束lang标记后有一个“A”。这也将处理字符串末尾文本的情况,例如“…[/lang_en]A”。