精华内容
下载资源
问答
  • java 字符串匹配函数

    2020-09-06 01:15:30
    java去掉字符串匹配字符串
  • python实现 字符串匹配函数

    千次阅读 2019-04-16 20:04:58
    通配符是 shell 命令中的重要功能, ? 表示匹配任意 1 个字符, *表示匹配 0 个或多个字符。...请使用你熟悉的编程语言实现一个字符串匹配函数, 支持 ? 和 * 通配符。如 “a?cd*d” 匹配 “abcdaccd” ...

    通配符是 shell 命令中的重要功能,

    ? 表示匹配任意 1 个字符,

    *表示匹配 0 个或多个字符。

    请使用你熟悉的编程语言实现一个字符串匹配函数,

    支持 ? 和 * 通配符。如 “a?cd*d” 匹配 “abcdaccd”

     

    展开全文
  • vc 支持通配符的字符串匹配算法函数用法实例,作者: 苗人头领,使用方法: 直接拷贝代码,里面有几个字符串处理函数,这些函数全部都支持带通配符的字符串匹配、多重匹配、查找字符串,还有KMP算法、求与等。
  • 32|字符串匹配基础上如何借助哈希算法实现高效字符串匹配 32|字符串匹配基础上如何借助哈希...Java indexOf) Python find) 的字符串查找函数比如 中的 中的 函数等它们底层就是依赖接下来要讲的字符串匹配算法 BF RK
  • delphi 使用正则表达式进行字符串匹配函数

    uses Masks

    MatchesMask(str,'*login:*')

    =0相等

    <>0不相等

    展开全文
  • 字符串匹配算法知多少?

    千次阅读 多人点赞 2021-07-03 10:00:09
    一说到字符串匹配算法,不知道会有多少小伙伴不由自主的想起那个kmp算法呢? 想到是很正常的,谁让它那么优秀呢。 BF算法 不要被事物的表面现象所迷惑,这个算法全称:Brute Force,有个拉风的中文名:暴力匹配算法...

    在这里插入图片描述

    一说到字符串匹配算法,不知道会有多少小伙伴不由自主的想起那个kmp算法呢?

    想到是很正常的,谁让它那么优秀呢。


    BF算法

    不要被事物的表面现象所迷惑,这个算法全称:Brute Force,有个拉风的中文名:暴力匹配算法。

    能想明白了吧。

    如果模式串长度为 m,主串长度为 n,那在主串中,就会有 n-m+1 个长度为 m 的子串,我们只需要暴力地对比这 n-m+1 个子串与模式串,就可以找出主串与模式串匹配的子串。

    1、从头开始往后遍历匹配;
    2、遇上不对了,就回头,把子串和主串的匹配头后移一位
    3、重复以上。直到找到或确定找不到。
    

    复杂度很高啊,但是在实际开发中也是比较常用的。为什么呢?
    真当天天都有成千上万个字符的主串让我们去匹配吗?一般都比较短,而且,统计意义上,算法执行效率不会真的到M*N的地步。

    理论还是要结合实际的。

    还有另一个原因,就是它好写。当然kmp现在更好写,因为封装好了。
    我说的是类似的场景,没有封装好的函数时候,好写,好改。


    RK算法

    RK 算法的思路是这样的:我们通过哈希算法对主串中的 n-m+1 个子串分别求哈希值,然后逐个与模式串的哈希值比较大小。如果某个子串的哈希值与模式串相等,那就说明对应的子串和模式串匹配了(这里先不考虑哈希冲突的问题,后面我们会讲到)。因为哈希值是一个数字,数字之间比较是否相等是非常快速的,所以模式串和子串比较的效率就提高了。

    有没有方法可以提高哈希算法计算子串哈希值的效率呢?

    我们假设要匹配的字符串的字符集中只包含 K 个字符,我们可以用一个 K 进制数来表示一个子串,这个 K 进制数转化成十进制数,作为子串的哈希值。

    比如要处理的字符串只包含 a~z 这 26 个小写字母,那我们就用二十六进制来表示一个字符串。我们把 a~z 这 26 个字符映射到 0~25 这 26 个数字,a 就表示 0,b 就表示 1,以此类推,z 表示 25。

    在这里插入图片描述

    这里有一个小细节需要注意,那就是 26^(m-1) 这部分的计算,我们可以通过查表的方法来提高效率。我们事先计算好 26^0、26^1、26^2……26^(m-1),并且存储在一个长度为 m 的数组中

    模式串哈希值与每个子串哈希值之间的比较的时间复杂度是 O(1),总共需要比较 n-m+1 个子串的哈希值,所以,这部分的时间复杂度也是 O(n)。所以,RK 算法整体的时间复杂度就是 O(n)。

    但是呢,还有一个很致命的问题,叫做数值过大。
    以幂增的速度是非常快的,用不了多久int就hold不住了啊,那要怎么办?难道我们前面所做的努力都白费了?

    其实不然。
    比方说我们可以改乘为加,当我们匹配到一样的哈希值的时候,再打开子串进行比对,因为相加的话是会有哈西冲突的。

    此外,我们还可以加点优化,一边对主串构建,一边对子串进行匹配,如果一样的话就不继续计算后面的hash了。
    该省的时候就要省,该花的时候就要花。


    编辑器中的全局替换方法:BM算法

    用过吗?比方说要在我这篇博客里找出全部的“主串”这个词,有没有想过其底层的原理?

    这是一个性能优于KMP的算法。

    坏字符

    BM 算法的匹配顺序比较特别,它是按照模式串下标从大到小的顺序,倒着匹配的。

    我们从模式串的末尾往前倒着匹配,当我们发现某个字符没法匹配的时候。我们把这个没有匹配的字符叫作坏字符(主串中的字符)

    在这里插入图片描述

    这时候该如何操作呢?我们去子串中寻找这个坏字符,如果找到了,就让两个字符的位置对上,继续往后,如果没有找到,就将整个子串移动到坏字符后面。

    很显然,这会儿没找到。

    在这里插入图片描述

    接下来该怎么滑呢?又是个坏字符。
    但是在子串中找到了那个坏字符,那就将两个字符的位置对上。

    在这里插入图片描述

    模式串中有对应的坏字符时,让模式串中 最靠右 的对应字符与坏字符相对。

    在这里插入图片描述

    但是呢,用这个规则还是不太够用的,有些个特殊情况吧,它会导致不但不会向后滑动模式串,还有可能会倒推、

    比如说主串:kkkkkkkkkkkkkkkkkk,模式串是 akk


    好后缀规则

    在这里插入图片描述

    如果模式串中存在已经匹配成功的好后缀,则把目标串与好后缀对齐,然后从模式串的最尾元素开始往前匹配。

    在这里插入图片描述

    如果无法找到匹配好的后缀,找一个匹配的最长的前缀,让目标串与最长的前缀对齐:
    在这里插入图片描述

    在这里插入图片描述

    如果完全不存在和好后缀匹配的子串,则右移整个模式串


    代码实现

    难顶,我一定会回来的

    // a,b 表示主串和模式串;n,m 表示主串和模式串的长度。
    public int bm(char[] a, int n, char[] b, int m) {
      int[] bc = new int[SIZE]; // 记录模式串中每个字符最后出现的位置
      generateBC(b, m, bc); // 构建坏字符哈希表
      int[] suffix = new int[m];
      boolean[] prefix = new boolean[m];
      generateGS(b, m, suffix, prefix);
      int i = 0; // j 表示主串与模式串匹配的第一个字符
      while (i <= n - m) {
        int j;
        for (j = m - 1; j >= 0; --j) { // 模式串从后往前匹配
          if (a[i+j] != b[j]) break; // 坏字符对应模式串中的下标是 j
        }
        if (j < 0) {
          return i; // 匹配成功,返回主串与模式串第一个匹配的字符的位置
        }
        int x = j - bc[(int)a[i+j]];
        int y = 0;
        if (j < m-1) { // 如果有好后缀的话
          y = moveByGS(j, m, suffix, prefix);
        }
        i = i + Math.max(x, y);
      }
      return -1;
    }
     
    // j 表示坏字符对应的模式串中的字符下标 ; m 表示模式串长度
    private int moveByGS(int j, int m, int[] suffix, boolean[] prefix) {
      int k = m - 1 - j; // 好后缀长度
      if (suffix[k] != -1) return j - suffix[k] +1;
      for (int r = j+2; r <= m-1; ++r) {
        if (prefix[m-r] == true) {
          return r;
        }
      }
      return m;
    }
    

    KMP算法

    【C++】算法集锦(10)通俗讲kmp算法

    展开全文
  • hql中substr函数截取字符串匹配

    千次阅读 2020-12-29 11:55:17
    开发中,经常进行模糊查询或者进行截取字符串进行模糊匹配,常用的就是substr函数或者substring函数。 使用语法: substr(string A, int start),substring(string A, int start) 两者用法一样,两个参数 返回值: ...

    开发中,经常进行模糊查询或者进行截取字符串进行模糊匹配,常用的就是substr函数或者substring函数。

    使用语法: substr(string A, int start),substring(string A, int start) 两者用法一样,两个参数

               返回值: string
    
               说明:返回字符串A从start位置到结尾的字符串
    
    

    举例演示:

     hive> select substr('abcde',3) fromlxw_dual;
                cde
     hive> select substring('abcde',3) fromlxw_dual;
               cde
     hive> select substr('abcde',-1) from lxw_dual; (和ORACLE相同,负数从最后一位开始截取)
               e
     hive> select substr('abcde',1,2) 和selectsubstr('abcde',0,2)结果一样ab,默认都是从第一位开始取.
    
    

    参数中负数的使用,对于较长的字符串截取更为方便
    语法: substr(string A, int start, int len),substring(string A, intstart, int len),用法一样,三个参数

         返回值: string
    
        说明:返回字符串A从start位置开始,长度为len的字符串
    
    

    举例演示:

    hive> select substr('abcde',3,2) fromlxw_dual;
              cd
    hive> select substring('abcde',3,2) fromlxw_dual;
              cd
    hive>select substring('abcde',-2,2) fromlxw_dual;
              de
    
    
    展开全文
  • 最近需要一个能够匹配两个字符串是否相似的函数,然后根据3组字符串判断两条数据是否对应的.刚开始想自己写一个函数,但是后来发现StrUtils.pas有一个自带的函数AnsiResemblesText.用起来效果不错,但是不知道具体他...
  • 最近在写一个程序,需要用到字符串匹配,并且返回匹配的字符串,C语言库函数中的strtstr无法满足我的要求,只能自己写了。 代码如下 //string match function char *matchString(const char* buf, const char* sub) ...
  • C++中字符串匹配算法strstr()函数用法

    万次阅读 2017-05-07 16:14:28
    strstr() const char* _cdecl strstr(const char* _Str, const char* _Substr); char* _cdecl strstr(char* _...strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首
  • mysql LOCATE()函数进行字符串匹配

    千次阅读 2018-11-14 15:20:55
    LOCATE()字符串查找函数 场景 &lt;if test="condition != null and condition!='' "&gt; AND ( LOCATE(#{condition},op.name)&gt;0 OR LOCATE(#{condition},op.mobile)&gt;0 ...
  • sql中的字符串匹配函数大全

    万次阅读 2011-11-24 22:26:21
    Microsoft SQL 有两个答应你按照发音来匹配字符串函数函数SOUNDEX()给一个字符串分配一个音标码,函数DIFFERENCE()按照发音比较两个字符串。当你不知道一个名字的确切拼写,但多少知道一点它的发音时,使用...
  • 本文主要介紹PostgreSQL 的行转列、列转行以及字符串切割函数,实际业务中对前两个均有使用,并配有实际例子参考。 1、字符串列转行 string_agg,某些地方也称为字符串聚合操作。 如果需要按照一个字符串按照某个...
  • C语言版字符串查找函数字符串中查找子串
  • Python字符串匹配

    千次阅读 2017-11-16 11:10:34
    Python中re模块提供了字符串匹配函数,常用函数如下: 1.re.match()这个函数描述如下: match(pattern , string , [, flags]) 检查string的开头是否有字符与pattern匹配。如果成功则返回MatchObject,失败则...
  • 字符/字符串 查找函数

    千次阅读 2016-05-07 11:07:18
    #本篇博客主要内容为模拟实现四个字符/字符串查找函数! /*  @避免与库函数冲突,命名为my_strchr;my_strrchr;my_strstr;rmy_strrstr; */ #头文件引用在这里一并标出: #include #include #include #include ...
  • [Lua]字符串及字符串匹配

    万次阅读 2014-11-18 20:07:52
    --lua中字符串索引从前往后是1,2,……,从后往前是-1,-2……。 --string库中所有的function都不会直接操作字符串,只返回一个结果 基本函数 函数 描述 示例 结果 ...
  • 目录 subst patsubst strip findstring filter filter-out sort word wordlist words firstword 字符串函数实例 subst ...名称:字符串替换函数——subst。 功能:把字串<text>...
  • 字符串匹配算法

    千次阅读 2018-11-05 17:58:47
    网络信息中充满大量的字符串,对信息的搜寻至关重要,因此子字符串查找(即字符串匹配)是使用频率非常高的操作:给定一段长度为N的文本和长度为M的模式字符串(N≥M),在文本中找到一个和模式串相匹配的子串。...
  • 字符串匹配(多模式匹配篇)

    千次阅读 2018-05-12 22:39:22
    字符串匹配(多模式匹配篇)摘要:问题的提出:众所周知,KMP算法在O(n)的时间中solve单模式串匹配问题。但怎样solve多模式串匹配问题呢?Solve:本文用简要记叙了使用trie树,trie图(AC自动机)solve该问题的...
  • C语言字符串处理函数

    千次阅读 2015-08-30 06:56:53
    C语言的字符串处理函数库包括复制函数、拼接函数、比较函数、搜索函数等,这些函数的声明都位于头文件。使用这些函数时,需要使用#include指令将头文件包含到文件中。
  • C语言实现常见字符串操作函数

    千次阅读 2019-01-28 12:52:31
    常见字符串操作函数的实现 strlen函数 函数声明原型: size_t strlen( const char *string ); 函数功能: 计算指定的字符串string的长度,不包括结束字符’\0’,之后返回字符串string的长度 strlen函数实现...
  • 实现朴素的字符串匹配

    千次阅读 2020-04-14 22:46:37
    在一个长字符串中寻找一个短字符串出现的位置,这是字符串匹配问题。 例如:长字符串是 “string” ,短字符串是 “ring” ,那么短字符串在长字符串中出现的位置是 2 ,即 “ring” 在 “string” 中出现的开始位置...
  • Python 字符串匹配、搜索及替换

    千次阅读 2019-12-31 23:11:45
    文章目录字符串匹配、搜索及替换字符串开头或结尾匹配str.startswith() 和 str.endswith()用 Shell 通配符匹配字符串fnmatch() 和 fnmatchcase()字符串匹配和搜索 字符串匹配、搜索及替换 字符串开头或结尾匹配 ...
  • 走进字符串函数

    千次阅读 2021-03-26 14:40:27
    统计字符串连续匹配字符的个属于8.分解字符串 1.前言 字符串函数的头文件是<string.h> ,字符串函数都有返回值,但是平时很少有人关心它们。用字符串函数对自身操作的结果都是未定义的,并没有标准会指明它们...
  • FuzzyWuzzy:Python中的模糊字符串匹配

    千次阅读 2019-03-13 16:25:07
    什么是模糊字符串匹配? 模糊字符串匹配是大致(而不是精确地)查找与给定模糊匹配的字符串的过程,就像字面意思一样,它也被称为近似字符串匹配。通常,这些字符串普哦诶的模式另一个字符串。 使用Levenshtein ...
  • hive函数 -- split 字符串分割函数

    千次阅读 2020-06-13 13:53:57
    hive函数 -- split 字符串分割函数 hive字符串分割函数 split(str, regex) - Splits str around occurances that match regex Time taken: 0.769 seconds, Fetched: 1 row(s) 返回值为一个数组 a.基本用法: ...
  • Python实现字符串匹配算法代码示例

    千次阅读 2018-02-10 21:39:28
    Python实现字符串匹配算法代码示例字符串匹配存在的问题Python中在一个长字符串中查找子串是否存在可以用两种方法:一是str的find()函数,find()函数只返回子串匹配到的起始位置,若没有,则返回-1;二是re模块的...
  • MySQL字符串截取函数

    千次阅读 2018-12-04 22:37:46
    在数据库中,对于一个字符串,有时候我们需要截取字符串中的某一段,这时候我们就要用到字符串截取函数。 LEFT( Str, index) Str–表示待截取的字符串 index–表示从左边开始共截取多少位 LEFT( ) 函数也可以放在 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 496,592
精华内容 198,636
关键字:

字符串匹配函数