在mySQL正则表达式中转义问号

时间:2018-03-17 00:56:07

标签: mysql sql regex

我有这个使用正则表达式的简单查询。我不知道为什么每次尝试运行它都会返回错误。

select *
from mytable
where thumbnail_url regexp '^\?.+'

基本上,我想查看此列表中的任何字符串是否以问号开头。 我通过My​​SQLWorkbench 6.3连接到Amazon RDS。

1 个答案:

答案 0 :(得分:4)

当您使用反斜杠来转义MySQL中的正则表达式字符时,您还必须将反斜杠本身转义为\。 MySQL会看到一个?字符,并尝试将其用作SQL语句本身的转义字符,而不是将其视为文字。但是你需要它作为文字才能修改正则表达式中的\

第一个\会转义第二个\?,从而产生一个文字正则表达式序列?来表示匹配字符串中的单个文字select * from mytable where thumbnail_url regexp '^\\?.+'

MySQL documentation on string literals ...

使用转义反斜杠格式化表达式:

function whois (name, domains = '*') {
    if ( typeof domains == 'Object' && domains.length > 0 ) {
      var TLD = domains;
    } else {
      var TLD = ['.com','.net','.org','.edu','.gov', '.biz', '.info', '.mobi', '.me', '.tv', '.info', '.io'];
    }

    var available = [];
    Promise.resolve(
      Promise.map(TLD, function(domain) {
        return dns.resolve4(name + domain, (err, addresses) => {
          if (!addresses || addresses.length <= 0 ){
            console.log(name + domain);
            available.push(name + domain);
          }
        });
      })
    ).then(()=>{
      console.log(available);
      return available;
    });
}