模式匹配

正则表达式

回眸只為那壹抹淺笑 提交于 2020-02-14 22:56:16
正则表达式用来指定字符串模式。当你需要定位匹配某种模式的字符串时就可以使用正则表达式。例如,我们下面的一个例程就是在一个HTML文件中通过查找字符串模式<a href="...">来定位所有的超链接。 当然,为了指定一种模式,使用...这种记号是不够精确的。你需要精确地指定什么样的字符排列是一个合法的匹配。当描述某种模式时,你需要使用一种特殊的语法。 这里有一个简单例子。正则表达式 [Jj]ava.+ 匹配下列形式的任何字符串: 首字母是J或j 后续的三个字母是ava 字符串的剩余部分由一个或多个任意字符组成 例如,字符串“javaness”匹配这个特殊的正则表达式,但是字符串“Core Java”却不匹配。 如你所见,你需要了解一点语法来理解正则表达式的含意。幸运的是对于大多数的用途,使用少量的简单构造(straightforward constructs)就已足够。 字符类是可选自符的集合,用‘[’封装,比如[Jj],[0-9],[A-Za-z]或[^0-9]。这里的-表示范围(Unicode落在两个边界之间的所有字符),^表示求补(指定字符外的所有字符)。 有许多预定以的字符类,像\d(数字)或\p{Sc}(Unicode货币符号),见表12-8和12-9。 大多数字符与它们自身匹配,像上例中的ava字符。 符号.匹配任何字符(可能行终止符(line terminators

学点Java正则表达式

一曲冷凌霜 提交于 2020-02-14 16:32:26
正则表达式用来指定字符串模式。当你需要定位匹配某种模式的字符串时就可以使用正则表达式。例如,我们下面的一个例程就是在一个HTML文件中通过查找字符串模式<a href="...">来定位所有的超链接。 当然,为了指定一种模式,使用...这种记号是不够精确的。你需要精确地指定什么样的字符排列是一个合法的匹配。当描述某种模式时,你需要使用一种特殊的语法。 这里有一个简单例子。正则表达式 [Jj]ava.+ 匹配下列形式的任何字符串: 首字母是J或j 后续的三个字母是ava 字符串的剩余部分由一个或多个任意字符组成 例如,字符串“javaness”匹配这个特殊的正则表达式,但是字符串“Core Java”却不匹配。 如你所见,你需要了解一点语法来理解正则表达式的含意。幸运的是对于大多数的用途,使用少量的简单构造(straightforward constructs)就已足够。 字符类是可选自符的集合,用‘[’封装,比如[Jj],[0-9],[A-Za-z]或[^0-9]。这里的-表示范围(Unicode落在两个边界之间的所有字符),^表示求补(指定字符外的所有字符)。 有许多预定以的字符类,像\d(数字)或\p{Sc}(Unicode货币符号),见表12-8和12-9。 大多数字符与它们自身匹配,像上例中的ava字符。 符号.匹配任何字符(可能行终止符(line terminators

Java正则表达式

为君一笑 提交于 2020-02-14 14:34:27
Java正则表达式 java.util.regex 是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类: Pattern 和 Matcher 。Pattern是一个正则表达式经编译后的表现模式。Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。 正则表达式的构造摘要 详细摘要请看 jdk中文文档 ,下面我只是列出一些经常使用的 构造 匹配 . 任何字符(与行结束符可能匹配也可能不匹配) \d 数字:[0-9] \D 非数字: [^0-9] \s 空白字符:[ \t\n\x0B\f\r] \S 非空白字符:[^\s] \w 单词字符:[a-zA-Z_0-9] \W 非单词字符:[^\w] [abc] a、b 或 c(简单类) [^abc] 任何字符,除了 a、b 或 c(否定) [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) ^ 行的开头 $ 行的结尾 X? X,一次或一次也没有 X* X,零次或多次 X+ X,一次或多次 X{n} X,恰好 n 次 X{n,} X,至少 n 次 X{n,m} X,至少 n 次

Scala学习笔记-07-模式匹配 - match case语句

↘锁芯ラ 提交于 2020-02-14 01:04:19
case中的通配符 _ 相当于java中的default分支 match结构中不需要break语句来跳出判断,scala会从前往后匹配,一旦配到一个分支即停止 匹配字符: import scala.io.StdIn._ println("Please input the score Level: ") val grade = readChar() grade match{ case 'A' => println("85-100") case 'B' => println("70-84") case 'C' => println("60-69") case 'D' => println("< 60") case _ => println("error input !") } 匹配字符串 import scala.io.StdIn._ val country = readLine("please input your country: ") country match { case "中国" => println("you are from China") case "美国" => println("youa are from USA") case "日本" => println("you are from Japan") case _ => println("country

7-105 串的模式匹配 (25分)(strstr的应用 )

大兔子大兔子 提交于 2020-02-13 10:54:27
看网上题解大部分都是用的KMP,个人比较懒,看到这个题感觉依稀记得有一个函数可以用来找子串。 strstr(s,t)函数,在s串中找子串t,如果没找到返回false,如果找到就返回剩下部分。 正好和该题题意完美契合,事实证明掌握一些函数关键时刻有奇效,代码如下: #include<bits/stdc++.h> using namespace std ; char s [ 1000100 ] ,t [ 1000010 ] ; int n ; int main ( ) { cin >> s ; getchar ( ) ; cin >> n ; while ( n-- ) { cin >> t ; getchar ( ) ; if ( ! strstr ( s,t )) cout << "Not Found" << endl ; else cout << strstr ( s,t ) << endl ; } } 来源: CSDN 作者: 给个选择 链接: https://blog.csdn.net/qq_44622401/article/details/104263378

C# 8.0 的新特性

流过昼夜 提交于 2020-02-13 07:50:14
目录 可空引用类型(Nullable reference types) 异步流(Async streams) 范围和下标类型(Ranges and indices) 模式匹配表达式(Switch expressions ) Switch表达式 Property patterns Positional patterns 非空判断 Tuple patterns 递归模式语句(recursive patterns) 使用VS2019体检C#8.0新功能: 编辑.csproj文件,添加如下代码 <PropertyGroup> <LangVersion>preview</LangVersion> </PropertyGroup> 回到顶部 可空引用类型(Nullable reference types) 引用类型将会区分是否可空,可以从根源上解决 NullReferenceException。 #nullable enable void M(string? s) { Console.WriteLine(s.Length); // 产生警告:可能为 null if (s != null) { Console.WriteLine(s.Length); // Ok } } #nullable disable 回到顶部 异步流(Async streams) 考虑到大部分 Api

python正则表达式详解

荒凉一梦 提交于 2020-02-12 13:20:28
前言正则表达式是一个特殊的字符序列,用来判断一个字符串与我们所设定的字符序列是否相匹配。实现快速检索文本和一些替换文本的操作。 在Python中我们有专门的正则表达式模块re,re 模块使 Python 语言拥有全部的正则表达式功能。compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。 一.常见函数 1.re.match re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。 *函数语法:*re.match(pattern, string, flags=0) 函数参数说明: pattern 匹配的正则表达式 string 要匹配的字符串。 flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 匹配成功re.match方法返回一个匹配的对象,否则返回None。 可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。 group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 groups()

python—正则表达式

余生长醉 提交于 2020-02-12 04:08:57
正则表达式: 一种用来提取有用信息的表达式 原子: 原子是正则表达式的基本组成单位,每个正则表达式至少含有一个原子。 原子主要有以下几种类型: a:普通字符 b:非打印字符 c:通用字符 d:原子表 对应模块 re #普通字符 作为原子 string = "dfsffsfsg" pat = "ffs" rs = re . search ( pat , string ) print ( rs ) # 结果(<_sre.SRE_Match object; span=(3, 6), match='ffs'>) # 非打印字符作为原子(\n,\t等) string = '''sfrgagr fa''' #'''换行,若是"则需加/n pat = "\n" rs = re . search ( pat , string ) print ( rs ) #通用字符 作为原子 ''' 常见通用字符 \w 字母,数字,下划线 \W 除去字母,数字,下划线... \d 十进制数字 \D 除十进制数字 \s 空白字符 \S 除空白字符 ''' string = "dfsff12323242sfsg" pat = "\d\d\d" #匹配三位十进制数字 rs = re . search ( pat , string ) print ( rs ) #结果 <_sre.SRE_Match object;

shell 模式匹配:case

帅比萌擦擦* 提交于 2020-02-11 08:25:49
case 变量 in 模式1)   命令序列1   ;; 模式2)   命令序列2   ;; 模式3)   命令序列3 *)   无匹配后命令序列 easc [root@localhost ~]# cat postfix.sh #!/usr/bin/env bash #start|stop|restart postfix case "$1" in start) service postfix start echo "start postfix" ;; stop) service postfix stop echo "stop postfix" ;; status) service postfix status ;; *) echo "Usage:`basename $0` start|stop|status" esac [root@localhost ~]# cat mysql_install.sh #!/usr/bin/env bash #install mysql #v1.0 by time.catcher echo "#############################" echo -e "\t1 mysql5.5" echo -e "\t2 mysql5.6" echo -e "\t3 mysql5.7" read -p "version[1-3]" version

串模式匹配--KMP和BF

陌路散爱 提交于 2020-02-11 00:54:51
1、暴力匹配算法BF 假设现在我们面临这样一个问题:有一个文本串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢? 如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置,则有: 如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下一个字符; 如果失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0。相当于每次匹配失败时,i 回溯,j 被置为0。 理清楚了暴力匹配算法的流程及内在的逻辑,咱们可以写出暴力匹配的代码,如下: int ViolentMatch(char* s, char* p) { int sLen = strlen(s); int pLen = strlen(p); int i = 0; int j = 0; while (i < sLen && j < pLen) { if (s[i] == p[j]) { //①如果当前字符匹配成功(即S[i] == P[j]),则i++,j++ i++; j++; } else { //②如果失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0 i = i - j + 1; j = 0; } } //匹配成功,返回模式串p在文本串s中的位置,否则返回-1 if (j == pLen) return i - j;