Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要在MySQL中进行REGEXP匹配吗_Sql_Mysql_Regex - Fatal编程技术网

需要在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”。