首页 > 解决方案 > 用于遵循 python 正则表达式的等价 mysql 正则表达式

问题描述

python模式=> ^(?=. \bABDUL\b)(?=. \bHAI\b. )(?=. \bMANSOOR\b).*$需要相等的mysql模式你能帮帮我吗?

标签: mysql

解决方案


有问题的正则表达式是一种非常奇怪的方式来匹配简单的单词。目前尚不清楚预期的输入是什么。也许,输入证明了这种方法。

^(?=.\bABDUL\b)(?=.\bHAI\b.)(?=.\bMANSOOR\b).*$

这意味着:开头必须有任何不是单词一部分的字符,然后是 ABDUL、非单词字符、HAI、非单词字符、MANSOOR、非单词字符或字符串的结尾。

^[^[:alnum:]]ABDUL[^[:alnum:]]HAI[^[:alnum:]]MANSOOR([^[:alnum:]]?.*)?$

即:开头,不是数字或字母字符(字母数字),ABDUL,一个非字母数字,HAI,一个非字母数字,MANSOOR 一个非字母数字或字符串的结尾。

我没有对其进行测试,也不打算让它与第一个 100% 相同,但它应该足够接近。

对于任何想要将其复制到他们的代码的人:

  • 匹配第一个字符不是很常见,并且可能是原始正则表达式中的错误。
  • (?=...) 是一个“前瞻断言”,它不消耗任何字符,POSIX 版本没有它,但对于简单的字符串搜索,它可能并不重要。
  • 两个版本都应该匹配字符串!ABDUL$HAI)MANSOOR- 确保这是你想要的。

对于想了解正则表达式的人,我将 https://dev.mysql.com/doc/refman/8.0/en/regexp.html用于 mysql(POSIX 语法)和https://docs.python.org/ 3/library/re.html for python(PCRE = Perl 兼容语法)


推荐阅读