首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL模糊搜索的几种姿势

01 引言 MySQL根据不同的应用场景,支持的模糊搜索方式有多种,例如应用最广泛的可能是Like匹配和RegExp正则匹配,二者虽然用法和原理都很相似,但实际上匹配原则却不尽相同,其中Like要求模式串与整个目标字段完全匹配才检索该记录...如前所述,Like匹配原则是要求模式串与整个目标字段匹配时,才返回该条记录;而RegExp中则是当目标字段包含模式串时即返回该条记录。...为了限定正则表达式以某个模式串开头或者结尾,可以通过添加"^"和"$"标识符来限定,例如仍然搜索以"hello"开头的目标字段,则其SQL语句为: SELECT words FROM tests WHERE...('hello'); 实际上,MATCH(words) against('hello')返回的是字段words对目标字符"hello"的匹配程度:当不存在任何匹配结果时,返回0;否则,根据匹配次数的多少和位置先后返回一个匹配度...04 总结 本文探讨了MySQL中4中模糊查询方式,包括: Like通配符用于查询目标字段与模式串完全匹配的记录,且无法应用全文索引提高查询速度,但以特定字符开头的模糊查询比以"%"开头时速度提升明显

3.3K20

浅析JavaScript正则表达式

6.指定匹配位置 正则表达式中匹配位置是一个难点 锚字符与断言 字符 含义 ^ 匹配字符串的开头,在多行检索中匹配一行的开头 $ 匹配字符串的结尾,在多行检索中匹配一行的结尾 \b 匹配一个单词的边界...仅当子表达式 X 在 此位置的右侧匹配时才继续匹配。例如,/w+(?=/d) 与后跟数字的单词匹配,而不与该数字匹配。此构造不会回溯。 (?!=x) 零宽度负先行断言。...仅当子表达式 X 不在 此位置的右侧匹配时才继续匹配。例如,例如,/w+(?!/d) 与后不跟数字的单词匹配,而不与该数字匹配 。 (?仅当子表达式 X 在 此位置的左侧匹配时才继续匹配。例如,(?的实例匹配。此构造不会回溯。 (?仅当子表达式 X 不在此位置的左侧匹配时才继续匹配。例如,(?<!

1.6K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Grep(Regex)中的正则表达式

    最简单的形式是,当没有给出正则表达式类型时,grep会将搜索模式解释为基本正则表达式。要将模式解释为扩展的正则表达式,请使用-E(或--extended-regexp)选项。...^(脱字符号)符号与一行开头的空字符串匹配。 在以下示例中,仅当字符串“ linux”出现在行的开头时才匹配。 $grep '^linux' file.txt $(美元)符号与行首的空字符串匹配。...例如,要查找仅包含“ linux”的行,请运行: $grep '^linux$' file.txt 另一个有用的示例是匹配所有空行的^ $模式。 匹配单个字符 ....以下模式将匹配以“ co”开头的字符串的任意组合,后接除“ l”之后为“ la”的任何字母(例如“ coca”,“ cobalt”等),但不匹配包含“ cola”的行 ”: $grep 'co[^l]a...$grep 's*right' 下面是更高级的模式,它匹配所有以大写字母开头,以句点或逗号结尾的行。

    2.8K40

    ExtractText

    Enable Canonical Equivalence false truefalse 当且仅当两个字符的"正规分解(canonical decomposition)"都完全相同的情况下,才认定匹配。...Permit Whitespace and Comments in Pattern false truefalse 在这种模式下,空格将被忽略,以#开头的嵌入注释将被忽略,直到行尾。...否则,如果正则表达式匹配不止一次,则只提取第一个匹配。 true false 当且仅当两个字符的"正规分解(canonical decomposition)"都完全相同的情况下,才认定匹配。...Permit Whitespace and Comments in Patternfalse true false 在这种模式下,空格将被忽略,以#开头的嵌入注释将被忽略,直到行尾。...matched 当正则表达式被成功求值并因此修改了流文件时,流文件被路由到这个关系 读取属性 没有指定。

    55630

    讲给前端的正则表达式(2):写出更优雅、更精确的正则表达式

    插入符号 如果在模式的开头添加 ^ 符号,则仅当被测试的字符串以该模式开头时,它才会匹配: /^dog/.test('dog and cat'); // true /^dog/.test('cat and...美元符号 在模式的末尾添加一个美元符号,仅当它出现在字符串的末尾时,才会匹配: /dog$/.test('dog and cat'); // false /dog$/.test('cat and dog...'); // true 结合两个标志 如果你的模式以 ^ 开头,并以 $ 结尾,则仅当测试的字符串整体匹配时,它才会匹配: /success/.test('Unsuccessful operation...^ 和 $ 中也会使它仅在整个字符串匹配时才匹配。...现在你更加了解了匹配模式,从而进一步了解如何指定要查找的样式的位置:字符串的开头与结尾,能够写出能够匹配整个字符串或行(多行模式下)的正则表达式。我们写出的模式将会越来越复杂:我鼓励你多去使用。

    74310

    (转)java正则表达式(二)

    非捕获组 以 (?) 开头的组是纯的非捕获 组,它不捕获文本,也不针对组合计进行计数。就是说,如果小括号中以?...仅当子表达式 X 在 此位置的右侧匹配时才继续匹配。例如,\w+(?=\d) 与后跟数字的单词匹配,而不与该数字匹配。此构造不会回溯。 (?!X) 零宽度负先行断言。...仅当子表达式 X 不在 此位置的右侧匹配时才继续匹配。例如,例如,\w+(?!\d) 与后不跟数字的单词匹配,而不与该数字匹配。 (?<=X) 零宽度正后发断言。...仅当子表达式 X 在 此位置的左侧匹配时才继续匹配。例如,(?的实例匹配。此构造不会回溯。 (?<!X) 零宽度负后发断言。...仅当子表达式 X 不在此位置的左侧匹配时才继续匹配。例如,(?的实例匹配 说明: 非捕获组中四个表达式的区别: (?=X ) 和(?!

    72520

    (转)Java正则表达式入门

    大 家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串。.../B 一个非单词的边界 /G 前一个匹配的结束 ^为限制开头 ^java 条件限制为以Java为开头字符 $为限制结尾 java$ 条件限制为以java为结尾字符 ....的取值范围如下: Pattern.CANON_EQ 当且仅当两个字符的"正规分解(canonical decomposition)"都完全相同的情况下,才认定匹配。...d) 在这个模式下,只有'/n'才被认作一行的中止,并且与'.','^',以及'$'进行匹配。...抛开空泛的概念,下面写出几个简单的Java正则用例: ◆比如,在字符串包含验证时 //查找以Java开头,任意结尾的字符串 Pattern pattern = Pattern.compile("

    98210

    正则表达式理论篇

    ES5在第一个参数是正则时,不允许此时使用第二个参数,会报错。 // 返回的正则表达式会忽略原有的正则表达式的修饰符,只使用新指定的修饰符。 // 下面代码返回”i”。...- 连字符 当且仅当在字符组[]的内部表示一个范围,比如[A-Z]就是表示范围从A到Z;如果需要在字符组里面表示普通字符-,放在字符组的开头即可。 . 匹配除换行符 \n 之外的任何单个字符。...=模式):x只有在y前面才匹配,必须写成/x(?=y)/。解释:找一个x,那个x的后面有y。 先行否定断言(?!模式):x只有不在y前面才匹配,必须写成/x(?!y)/。...\nml 当n 是八进制数字 (0-3),m 和 l 是八进制数字 (0-7) 时,匹配八进制转义码 nml。 修饰符 i 执行不区分大小写的匹配。...g 执行一个全局匹配,简而言之,即找到所有的匹配,而不是在找到第一个之后就停止。 m 多行匹配模式,^匹配一行的开头和字符串的开头,$匹配行的结束和字符串的结束。

    1.2K20

    re:Python中正则表达式的处理与应用

    前言 re库就是我们常说的正则表达式库,它是用一种形式化语法来描述的文本匹配模式。通过该库,我们可以匹配特定字符串中的一些内容,比如爬取网页内容时,我们可以通过re库获取网页内容中的所有标签内容。...常用的断言如下表所示: 断言语法 含义 (?=pattern ) 后向断言。仅当子表达式 X 在 此位置的右侧匹配时才继续匹配。例如,/w+(?=/d) 与后跟数字的单词匹配,而不与该数字匹配。...仅当子表达式 X 不在 此位置的右侧匹配时才继续匹配。例如,例如,/w+(?!/d) 与后不跟数字的单词匹配,而不与该数字匹配 。 (?仅当子表达式 X 在 此位置的左侧匹配时才继续匹配。例如,(?的实例匹配。此构造不会回溯。 (?仅当子表达式 X 不在此位置的左侧匹配时才继续匹配。例如,(?<!

    21520

    PHP正则表达式的模式修正符

    如preg_match('/\[TOC\]/i',$str) 这句话中的小写字母i,他跟在正则表达式后面,起的作用是匹配时忽略大小写 所以,上述正则表达式可以匹配诸如 [toc]、[ToC]、或者[TOC...当设定了此修正符,“行起始”和“行结束”除了匹配整个字符串开头和结束外,还分别匹配其中的换行符的之后和之前。这和 Perl 的 /m 修正符是等效的。...A (PCRE_ANCHORED) 强制从头开始匹配。如果设定了此修正符,模式被强制为“anchored”,即强制仅从目标字符串的开头开始匹配即自动在模式开头加上^。...如果设定了此修正符,模式中的美元元字符仅匹配目标字符串的结尾。没有此选项时,如果最后一个字符是换行符的话,美元符号也会匹配此字符之前(但不会匹配任何其它换行符之前)。...Perl 中没有与其等价的修正符。 S 当一个模式将被使用若干次时,为加速匹配起见值得先对其进行分析。如果设定了此修正符则会进行额外的分析。

    1.5K20

    前端架构师之12_JavaScript正则表达式

    模式符 说明 g 用于在目标字符串中实现全局匹配 i 忽略大小写 m 实现多行匹配 u 以Unicode编码执行正则表达式 y 粘性匹配,仅匹配目标字符串中此正则表达式的lastIndex属性指示的索引...例如,既要忽视大小写又要进行全局匹配,则可以直接使用gi,并且在编写多个模式修饰符时没有顺序要求。 因此,模式修饰符的合理使用,可使正则表达式变得更加简洁、直观。...=y) 仅当x后面紧跟着y时,才匹配 x Countr(?=y|ies)用于匹配Country或Countries中的Countr x(?!y) 仅当x后不紧跟着y时才匹配 x Countr(?!...multiline 检测正则表达式是否使用了m模式修饰符,使用返回true,否则返回false lastIndex 全局匹配时用来指定下一次匹配的起始索引 source 返回正则表达式对象的模式文本的字符串...当分隔符不只一个时,需要定义正则对象才能够完成字符串的分割操作。

    7010

    Linux基础之正则表达式

    正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。 给定一个正则表达式和另一个字符串,我们可以达到如下的目的: 1....grep 命令说明: 常用的选项OPTION: -c 显示匹配到的行数之和 -o 仅显示匹配本身 -v 显示非匹配,取反 -i 不区分大小写 -E 支持扩展表达式 -q 静默模式 -n 显示匹配到的行的行号...,以#号开头,后面仅跟一个空格,且不以空白符结尾的行: 显示 /tmp/sshd_config 文件中不以#注释、空白行以及有空白字符的行: 显示 /etc/passwd 文件中用户名和用户SHELL...为一样的行: 显示 /tmp 目录下,以非字母开头,后面跟一个字母,后面为任意长度任意字符的文件或者目录: 显示 /tmp 目录下以非字母开头,后面仅跟一个字母,然后以非字母结尾的文件和目录: 显示.../etc 目录下以p开头不以数字结尾的所有文件和目录: 显示 ip a 或者 ifconfig 命令中的IP地址,-E 选项为支持扩展正则表达式: -l 选项可以列出包含字符串的文件列表: -w

    1.1K20

    正则表达式

    模式修饰符:用来修改模式的含义,如 g 表示全局匹配,i 表示不区分大小写匹配等。 三、正则表达式的使用场景 验证输入:例如,验证一个密码是否符合要求,可以通过正则表达式来匹配密码中的特定字符模式。...来表示前瞻断言,即匹配后面紧跟着某个字符串的文本。例如,a(?=b) 表示匹配以 a 结尾的文本,但只有当后面紧跟着 b 时才匹配成功。 使用后顾断言:在正则表达式中,可以使用 (?匹配前面紧挨着某个字符串的文本。例如,a(?匹配以 b 开头的文本,但只有当前面紧挨着 a 时才匹配成功。 使用负向预测:在正则表达式中,可以使用 (?!...)...来表示负向预测,即匹配不包含某个字符串的文本。例如,a(?!b) 表示匹配以 a 开头的文本,但只有当后面不包含 b 时才匹配成功。 使用零宽断言:在正则表达式中,可以使用 (?=...)...但是,当文本跨越多行时,使用 ^ 和 可能无法正确匹配。此时可以使用 m 和 s 标志来启用多行模式。在多行模式下,^ 和 使用标志:在正则表达式中,可以使用标志来修改模式的含义。

    18810

    学校早这么教正则表达式,少走多少弯路!那个分组用法震到我了

    在其最简单的形式中,当没有给定正则表达式类型时,grep将搜索模式解释为基本正则表达式。 要将模式解释为扩展正则表达式,请使用-E(或--tended-regexp)选项。...例如,要查找仅包含“linux”的行,请运行: grep '^linux$' file.txt 如果用来匹配空白行,可以使用“^$”模式。 匹配单个字符 那个....例如,要匹配以“kan”开头、然后有两个字符、以字符串“roo”结尾的任何内容,可以使用以下模式: grep 'kan..roo' file.txt 这样可以匹配出含有 kangaroo 的行。...以下模式将匹配以“co”开头、后跟除“l”和“la”之外的任何字母的任意字符串组合,如“coca”、“cobalt”等,但不匹配包含“cola”的行: grep 'co[^l]a' file.txt 你可以在方括号内指定一个字符范围...以下内容将与“right”、“sright”、“ssright”等匹配: grep 's*right' 下面是更高级的模式,它匹配以大写字母开头、以句点或逗号结束的所有行。 .

    2.4K30

    Perl在ASIC中的应用——高级篇(1):正则表达式

    当?跟在*,+,?等后面时,表示非贪婪模式。如, my $test = "aaaaabb"; $test =~ m/a+?...~ 表示不满足匹配 如: if($tc =~ m/^tc_/){ ... } 表示如果$tc变量以tc_开头,则执行{}里的语句。 if($tc !...~ m/^tc_/){ ... } 表示如果$tc变量不以tc_开头,则执行{}里的语句。 正则表达式的匹配模式 i 忽略大小写 m 多行处理,即字符串中的换行符把字符串分为多行。...匹配时不能越行 s 单行处理,在这个模式下,元字符.可以匹配换行符 x 允许正则表达式换行和加注释,忽略空白字符 g 查到全局所有可能的匹配,即会匹配多次 e 用于替换,表示替换的新值要先计算...用正则表达式把门级网表拆分成多个仅包含单个module的文件。 答案:http://www.exasic.com/example/split_netlist.zip 3.

    1.8K20

    Bash 脚本:正则表达式基础篇

    同样,我们可以使用任意数量的点作为我们的搜索模式,如 ,这个查询项将查找一个词,以 开始,以 结尾,并且中间可以有任意 6 个字符。 方括号用于定义字符范围。...例如,我们需要搜索一些特别的单词而不是匹配任何字符, 这里,我们正寻找一个单词,以 开头,以 结尾,并且中间只能有 、 或者 中的一个。 在方括号中我们可以提到单个到任意数量的字符。...我们在方括号中也可以定义像 或者 作为匹配字符的列表。 这就像正则表达式的 not 操作。当使用 时,它意味着我们的搜索将包括除了方括号内提到的所有字符。...到现在为止,我们只使用了仅需要在中间查找单个字符的正则表达式的例子,但是如果我们需要更多字符该怎么办呢。假设我们需要找到以一个字符开头和结尾的所有单词,并且在中间可以有任意数量的字符。...在以下模式匹配中 匹配字符串 或 ,使用 乘数,我们可以有一个或零个字符的出现。 非常重要的提示 当使用乘数时这是非常重要的,假设我们有一个正则表达式 我们得到的结果是 、,并且我们也得到了 。

    1.8K80

    正则表达式用法简介与速查

    匹配单词的开头 (扩展的正则表达式,egrep支持) \> 匹配单词的结束 (扩展的正则表达式,egrep支持) ^ 匹配字符串的开头 一般将整段文本视为一个字符串,可以和分行匹配模式组合使用 $ 匹配字符串的结尾...匹配以“a”或“c”开头,后跟字符“1”的2字符组合。...* 匹配结果 something blablabla something else 解释: 如果我们希望,整段文本只有当以开头时才匹配,...若之前有其他内容则不匹配;同样,整段文本只有以结尾时才匹配,之后若有其他内容则不匹配, 此时就需要用到 ^(字符串开头)和 $(字符串结尾)匹配符了。...我们要找到255及以下的数字,有4种合理情况:(1) 1位或2位数字;(2) 以1开头的3位数字; (3) 以2开头的3位数字,十位为0~4的;(4) 以25开头的3位数字,个位为0~5的。

    3.7K20

    JavaScript之正则表达式

    正则表达式 (regular expression) 描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。...模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。 元字符 ?...,看看它是如何工作的: ^:^字符表示此字符串的开始,它是一个锚,指引exec不要跳过那些不像URL的前缀,只匹配那些从开头就像URL一样的字符串。...:这个因子匹配一个协议名,但仅当它后面跟随一个 :(冒号)的时候才匹配。(?: . . .)表示一个非捕获型分组(noncapturing group)。后缀 ?...:这个因子也是可选的分组,匹配路径。该分组以一个 / 开始。之后的字符类[^?#]以一个^开始,它表示这个类包含除 ? 和 # 之外的所有字符。* 表示这个字符类会被匹配0次或多次。

    79460
    领券