首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL 5.5.15 -查询REGEXP模式返回奇怪的结果

问MySQL 5.5.15 -查询REGEXP模式返回奇怪的结果
EN

Stack Overflow用户
提问于 2021-10-26 14:30:50
回答 1查看 67关注 0票数 1

在文本列(HTML)中使用占位符:

代码语言:javascript
复制
[[ID|STRING]]

示例:

代码语言:javascript
复制
[[2|telefon]]
[[43|name]]

还有使用以下格式的占位符:

代码语言:javascript
复制
[[ID|STRING|STRING]]

示例:

代码语言:javascript
复制
[[56|baustein|s]]

第一个字符串总是命名为"baustein",第二个字符串是alwys "s“或"d”。

我希望获得字符串列包含第一种占位符的所有记录,但不包含第二种占位符。

我的正则表达式是:

代码语言:javascript
复制
\[\[#d.id#\|(anrede|name1|name2|name3|strasse|plz|ort|telefon|fax|email|emailaddress|web|bild)\]\]

注意:#d.id#是一个包含整数的变量。

不幸的是,查询结果包括包含第一个和第二个占位符的所有记录,而不仅仅是第一个占位符。

我已经使用https://regex101.com/ (PCRE2 PHP)测试了regexp,它似乎还可以。

我和MySQL一起错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-26 21:34:15

使用

代码语言:javascript
复制
REGEXP '[[][[][0-9]+[|](anrede|name1?|name2|name3|strasse|plz|ort|telefon|fax|email|emailaddress|web|bild)]]'

解释

代码语言:javascript
复制
--------------------------------------------------------------------------------
  [[]                      any character of: '['
--------------------------------------------------------------------------------
  [[]                      any character of: '['
--------------------------------------------------------------------------------
  [0-9]+                   any character of: '0' to '9' (1 or more
                           times (matching the most amount possible))
--------------------------------------------------------------------------------
  [|]                      any character of: '|'
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    anrede                   'anrede'
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    name                     'name'
--------------------------------------------------------------------------------
    1?                       '1' (optional (matching the most amount
                             possible))
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    name2                    'name2'
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    name3                    'name3'
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    strasse                  'strasse'
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    plz                      'plz'
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    ort                      'ort'
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    telefon                  'telefon'
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    fax                      'fax'
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    email                    'email'
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    emailaddress             'emailaddress'
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    web                      'web'
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    bild                     'bild'
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  ]]                       ']]'

不要转义]括号,用字符类转义单个字符,或使用双反斜杠、\\[\\[和\\|。

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

https://stackoverflow.com/questions/69725026

复制
相关文章

相似问题

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