当前位置: 首页 > 面试题库 >

MySQL REGEXP单词边界[[:<:]] [[:>:]]和双引号

须衡虑
2023-03-14
问题内容

我正在尝试将某些全字词表达式与MySQL REGEXP函数进行匹配。当涉及到双引号时,就会出现问题。

MySQL文档说:“要在正则表达式中使用特殊字符的文字实例,请在其前面加上两个反斜杠()字符。”

但是这些查询都返回0:

SELECT '"word"' REGEXP '[[:<:]]"word"[[:>:]]';             -> 0
SELECT '"word"' REGEXP '[[:<:]]\"word\"[[:>:]]';           -> 0
SELECT '"word"' REGEXP '[[:<:]]\\"word\\"[[:>:]]';         -> 0
SELECT '"word"' REGEXP '[[:<:]] word [[:>:]]';             -> 0
SELECT '"word"' REGEXP '[[:<:]][[.".]]word[[.".]][[:>:]]'; -> 0

我还能尝试得到1?还是这不可能?


问题答案:

首先让我引用文档:

[[:<:]],[[:>:]]

这些标记代表单词边界。它们分别匹配单词的开头和结尾。单词是单词字符的序列,不能在单词字符之前或之后。单词字符是alnum类中的字母数字字符或下划线(_)。

从文档中,我们可以看到问题背后的原因,而原因并非由逃逸引起。问题是您试图[[:<:]]在字符串的开头匹配单词边界,这是行不通的,因为从文档中可以看到单词边界将单词字符与非单词字符分开,但是在您的情况下第一个字符是a
",不是单词字符,因此没有单词边界,最后一个"和也是如此[[:>:]]

为了使它起作用,您需要对此表达式进行一些更改:

"[[:<:]]word[[:>:]]"
 ^^^^^^^    ^^^^^^^

注意,此时的字边界分隔非单词字符"从字字符w在开始和"d字符串的结尾。

编辑: 如果您始终想在字符串的开头和结尾使用单词边界而不知道是否会有实际边界,则可以使用以下表达式:

([[:<:]]|^)"word"([[:>:]]|$)

这将匹配单词边界的开头或字符串的开头,并且匹配单词边界或字符串^结尾的结尾。我真的建议您研究要尝试匹配的数据,寻找常见的模式,如果它们不是适合工作的正确工具,请不要使用正则表达式。

SQL小提琴演示



 类似资料:
  • 词边界 \b 是一种检查,就像 ^ 和 $ 一样。 当正则表达式引擎(实现搜索正则表达式的程序模块)遇到 \b 时,它会检查字符串中的位置是否是词边界。 有三种不同的位置可作为词边界: 在字符串开头,如果第一个字符是单词字符 \w。 在字符串中的两个字符之间,其中一个是单词字符 \w,另一个不是。 在字符串末尾,如果最后一个字符是单词字符 \w。 例如,可以在 Hello, Java! 中找到匹配

  • 使用正则表达式匹配表达式 为什么这两个示例匹配如下(突出显示): c# < code>a #b #c #d 具体来说,为什么第一个字符串不匹配包含最后一个#之前的所有内容? 由于单词边界(\b)是零宽度匹配,可以在单词字符(\w)和非单词字符(\ w)之间匹配,或者在单词字符和字符串的开始或结束之间匹配,我不确定以非单词字符结束表达式会如何影响匹配。

  • 对于PHP中的自定义脚本解析器,我想替换包含双引号和单引号的多行字符串中的一些单词。但是,只能替换引号之外的文本。 例如,我想把“苹果”换成“梨”,但只在引用句子之外。所以在这种情况下,只有“许多苹果从树上掉下来”里面的“苹果”才是目标。 以上将给出以下输出: 我怎样才能做到这一点?

  • 我正在尝试编写我的第一个Elasticsearch分析插件,我从github中找到了一个可扩展的标准Analyzer插件项目:Elasticsearch分析standardext,在该项目中它提供了以下代码: 这里是链接 我想知道如何获得这些单词边界的字符类。 我问有问题的作者:如何获得单词边界“字符类”?#2,但是作者似乎不会回答我的问题。 我尝试阅读Unicode文本分段文档:https://

  • 我正在使用以下代码将word转换为html文件 代码正在正确生成html输出。 我需要在文档中放入一些参数,如[[AGENT\u NAME]],稍后我将在代码中用正则表达式替换这些参数。但apache poi并没有将此模式视为单个单词,有时会拆分“[[”,“AGENT\u NAME” apache poi如何决定单词边界?有没有办法控制它?

  • 问题内容: 这实际上有什么区别? 这工作正常: 但以下操作无效: 这是为什么? 问题答案: 那是因为双引号被认为是标准的,而单引号却没有。这并不是真正针对JQuery,而是关于JSON标准。因此,无论使用JS工具包,您都应该期待相同的行为。 值可以是带双引号的字符串,也可以是数字,也可以是true或false或null,或者是对象或数组。这些结构可以嵌套。