【问题标题】:regex parenthese in capturing group捕获组中的正则表达式括号
【发布时间】:2016-12-15 14:58:27
【问题描述】:

我有这个 REGEX 表达式,用于通过 SQL 查询在文本中查找单词

[SQL QUERY] where REGEX concat(^|’| | | |\'|>|-)','Mercure','( | | |.|,|<|-) = 1

这就是我想要的工作方式(由于某些原因,传统的单词边界不起作用)。我想分别为每个捕获组添加一个左括号和一个右括号。但是当我尝试时:

(^|’| | | |\'|>|-|\()','Mercure','( | | |.|,|<|-|\))

然后我的 PHP 脚本出现错误,尽管 regex101 似乎并不觉得这很奇怪。有谁知道如何解决这个问题?

【问题讨论】:

  • 请粘贴您的 PHP 代码。
  • 如果你需要用 MySQL 匹配整个单词,也许你想要REGEX concat('[[:&lt;:]]','Mercure','[[:&gt;:]]')
  • 非常感谢 Wiktor:但是这些单词边界是否处理撇号之类的情况?就像法语中的“j'aime”一样,aime 必须被视为一个完整的词。我想这就是我当时选择以这种方式处理它的原因。不过,我想错了:这样更好……
  • 巴托兹:谢谢!我会尽快的。但是当我尝试这样做时,像 Sequel 这样的工具也会引发错误,所以我认为 PHP 代码不是这里的问题。
  • 抱歉...工作日结束。是的 j'aime 应该被视为两个词,撇号是直的还是弯曲的...不确定单词边界是否正确处理...

标签: php mysql regex


【解决方案1】:
WHERE col REGEXP "(^|[’ '>-])Mercure[ .,<-]"

我不明白有多个空格。

要查找仅与&lt; 匹配的&gt; 并不容易——这可能需要很长的选择列表。

解决问题(如果它很复杂)的一种方法是只在 MySQL 中这样做:

WHERE col LIKE '%Mercure%'

然后使用PHP代码过滤掉不符合复杂边界条件的行。

【讨论】:

  • 糟糕 - 存在缺陷。 REGEXP 仅适用于字节,不适用于 等多字节字符。正则表达式不会“失败”,但在某些情况下可能会很有趣。
猜你喜欢
  • 2015-01-20
  • 2013-10-31
  • 2020-02-21
  • 2012-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
相关资源
最近更新 更多