我想匹配一个看起来像这样的字符串:
[lang_de]Hallo![/lang_de][lang_en]Hello![/lang_en]HeyHo[lang_es]Hola![/lang_es]
如果存在未被lang_tags包围的文本(在此示例中为HeyHo
),我希望匹配返回true。它也可以位于字符串的开头或结尾。
空格不应该匹配,例如[lang_de]Tisch[/lang_de] [lang_en]Table[/lang_en]
不应该导致匹配。
我无法使用前瞻或回顾,因为MySQL似乎不支持这一点。
任何建议?
答案 0 :(得分:2)
试试这个正则表达式:
'^ *[^[ ]|\\[/lang_[a-z]{2}\\] *[^[ ]'
您可以使用它:
select *
from <table>
where <field> regexp '^ *[^[ ]|\\[/lang_[a-z]{2}\\] *[^[ ]'
它应该处理所有情况:
答案 1 :(得分:0)
我最好的尝试是:
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}\\])*$')
告诉我们你是怎么过的。