首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP脚本中,REGEXP未按预期工作

问在PHP脚本中,REGEXP未按预期工作
EN

Stack Overflow用户
提问于 2016-09-07 08:11:53
回答 3查看 77关注 0票数 0

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

PHP代码是:

代码语言:javascript
复制
$Query = "SELECT COUNT(*) FROM theTable WHERE fieldValue REGEXP 'Dom-R[eéèêë]my'";
$DBR = mysql_query($Query,$Connection);

我希望这个查询能得到这样的结果,我的意思是找出它们的数量:

代码语言:javascript
复制
Dom-Remy
Dom-Rémy
Dom-Rèmy
...etc...

但我什么也得不到,我是说什么都没有。代码中有什么错误?我已经尝试了几种变体,但都同样不起作用。

EN

回答 3

Stack Overflow用户

发布于 2016-09-07 08:16:10

这是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

票数 0
EN

Stack Overflow用户

发布于 2016-09-07 08:21:11

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

REGEXP和RLIKE运算符通过字符的字节值比较字符,重音字符可能不相等,即使给定的排序规则将它们视为相等。

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

代码语言:javascript
复制
$Query = "SELECT COUNT(*) FROM theTable WHERE field REGEXP '^Dom-R.+?my$'";
票数 0
EN

Stack Overflow用户

发布于 2016-09-09 01:12:13

如果

  • 该列的CHARACTER SET是utf8或utf8mb4,
  • 客户端和mysql服务器之间的连接也是这些字符集之一,
  • 您没有使用COLLATION utf8_bin,然后

'Dom-Remy‘= 'Dom-Rémy’= ...

WHERE ... = ...和WHERE ... LIKE ...将遵守上述规定。由于已经讨论过的原因,不能使用REGEXP (RLIKE)。

显示(对于=和LIKE)相等的值。

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

代码语言:javascript
复制
fieldValue LIKE '%Dom-Remy%`

而不是regexp/rlike

如果你有一些更复杂的东西需要REGEXP,那么从细节开始新的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39359535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档