REGEXP在PHP脚本中没有按预期工作

时间:2016-09-07 00:11:53

标签: php mysql regex

在PHP中查询数据库时,我遇到了mysql的这个问题。

PHP代码是:

$Query = "SELECT COUNT(*) FROM theTable WHERE fieldValue REGEXP 'Dom-R[eéèêë]my'";
$DBR = mysql_query($Query,$Connection);

我希望这个查询得到类似的东西,我的意思是找到它们的数量:

Dom-Remy
Dom-Rémy
Dom-Rèmy
...etc...

但我什么都没得到,我的意思是零。代码有什么问题?我尝试了几种变体,都同样不起作用。

3 个答案:

答案 0 :(得分:0)

这是 Unicode 字符的主题。

在您的示例中,e,é,è,ê,ë..不是单个字母而是2,因为代字号也算作字符。为了满足Unicode规则,这需要遵循许多复杂性和规则。

您可以执行以下操作:([\x{0049}-\x{0130}])搜索带有波浪号的字母,但此表达式可能会有所不同,具体取决于您是否要在.net,java,javascript或php上使用此表达式。

您还可以检查每个字符代表的代码:

http://www.fileformat.info/info/unicode/char/search.htm?q=%C4%B0&preview=entity

答案 1 :(得分:0)

根据官方website规范,MySQL正则表达式以字节方式匹配

  

REGEXP和RLIKE运算符按字符比较字符   即使a,字节值和重音字符也不能相等   鉴于整理将它们视为平等。

如果您可以匹配任何字符代替[eéèêë],这应该足够了:

$Query = "SELECT COUNT(*) FROM theTable WHERE field REGEXP '^Dom-R.+?my$'";

答案 2 :(得分:0)

如果

  • 该列的CHARACTER SETutf8utf8mb4
  • 您的客户端和mysql服务器之间的连接也是这些字符集,
  • 您没有使用COLLATION utf8_bin然后
'Dom-Remy'='Dom-Rémy'= ...

WHERE ... = ...WHERE ... LIKE ...将遵守上述规定。由于已经讨论过的原因,REGEXPRLIKE)无法使用。

This显示相同的内容(适用于=LIKE。)

如果您只是搜索Dom-Remy的字符串,请使用

fieldValue LIKE '%Dom-Remy%`

而不是regexp / rlike

如果您有更复杂的需要REGEXP的内容,请使用详细信息开始一个新问题。

相关问题