需要在MySQL中进行REGEXP匹配

时间:2009-08-03 21:27:52

标签: sql mysql regex

我想匹配一个看起来像这样的字符串:

[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似乎不支持这一点。

任何建议?

2 个答案:

答案 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}\\])*$')

告诉我们你是怎么过的。