正则表达式

正则表达式贪婪与非贪婪模式

僤鯓⒐⒋嵵緔 提交于 2020-03-26 09:07:43
之前做程序的时候看到过正则表达式的贪婪与非贪婪模式,今天用的时候就想不起来了,现在这里总结一下,以备自己以后用到注意。 1.什么是正则表达式的贪婪与非贪婪匹配    如:String str="abcaxc";     Patter p="ab*c";   贪婪匹配: 正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到: abcaxc (ab*c)。    非贪婪匹配 :就是匹配到结果就好,就少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到: abc (ab*c)。 2.编程中如何区分两种模式    默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。   量词:{m,n}:m到n个      *:任意多个      +:一个到多个      ?:0或一个 3.程序实例 使用Snort的规则一条规则的一部分作为匹配文本,匹配出其中的content部分。 1 import java.util.regex.Matcher; 2 import java.util.regex.Pattern; 3 4 public class RegularTest { 5 6 public static void main(String[] arg){ 7 String text="(content:\"rcpt to root

python正则表达式贪婪与非贪婪模式

五迷三道 提交于 2020-03-26 09:02:59
之前做程序的时候看到过正则表达式的贪婪与非贪婪模式,今天用的时候就想不起来了,现在这里总结一下,以备自己以后用到注意。 1.什么是正则表达式的贪婪与非贪婪匹配    如:String str="abcaxc";     Patter p="ab.*c";   贪婪匹配: 正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到: abcaxc (ab.*c)。    非贪婪匹配 :就是匹配到结果就好,最少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到: abc (ab.*?c)。 2、编程中如何区分两种模式   默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。   下面的都是量词: {m,n}:m到n个      *:任意多个      +:一个到多个      ?:0或一个 贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配 string pattern1 = @"a.*c"; // greedy match Regex regex = new Regex(pattern1); regex.Match("abcabc"); // return "abcabc" 非贪婪匹配:在满足匹配时,匹配尽可能短的字符串,使用?来表示非贪婪匹配 string pattern1 = @"a.*?c";

正则表达式贪婪模式中的非贪婪模式

左心房为你撑大大i 提交于 2020-03-26 09:02:36
这两天再写一个内部的统计,需要提取来自于其它搜索的关键字。 正则表达式:q=(.*?)& 需要提取的内容: http://so.360.cn/s?ie=utf-8&src=hao_search&q=%E6%83%A0%E5%B7%9E%E4%B8%BD%E5%A3%B0&ab 匹配的内容:%E6%83%A0%E5%B7%9E%E4%B8%BD%E5%A3%B0 解释:(.*? )其中?的作用,他的作用就是勉强模式重复前面的字符,什么意思呢?就是如果我用(.*a)去匹配aaaaaaa字符串的结果就是(aaaaaaa)源字符串这叫贪婪模式,如果用(.*?a)去匹配aaaaaaa的话他就会先匹配第一a,然后是第二个a,然后是第三个a…….这就叫勉强模式匹配有的地方也叫懒惰模式匹配。通俗一点(大家都喜欢通俗的解释,呵呵)就是前者是从后往前去匹配尽可能多的字符,而后者是从前往后匹配 来源: https://www.cnblogs.com/fogwang/p/3421470.html

python re模块

我的未来我决定 提交于 2020-03-26 07:48:36
'''1. 元字符 符号 含义 . 匹配除换行以外的任意字符 ^ 匹配字符串的开始位置,在[]中出现为非的意思 $ 匹配字符串的结束位置 * 匹配0次、1次或多次前面的原子 ? 匹配0次或1次前面的原子 + 匹配1次或多次前面的原子 {n} 前面的原子恰好出现n次 {n,} 前面的原子至少出现n次 {n,m} 前面的原子至少出现n次,至多出现m次 | 模式选择符 () 模式单元符,作分组:在findall 中使用,返回的参数是()中匹配的值,不会管外面其他参数      (?:reg):取消优先级,在findall中使用,会返回满足全部正则的字符,而不是返回字符的一部分(reg是变量)      (?P<name>);给分组指定name. (name是变量)   [] 字符集,里面出现的字符都只表示某一个字符,不会有转义问题    eg:    [a-z0-9A-Z] 数字,大小写字母中的一个 通用字符 符号 含义 \w 匹配任意一个字母、数字或下划线 \W 匹配除字符、数字和下划线以外的任意一个字符 \d 匹配任意一个十进制数 \D 匹配除十进制数以外的任意一个其它字符 \s 匹配任意一个空白字符 \S 匹配除空白字符以外的任意一个其它字符 \b:表示字母数字与非字母数字的边界, 非字母数字与字母数字的边界。 \B:表示字母数字与(非非)字母数字的边界

python 正则re模块

有些话、适合烂在心里 提交于 2020-03-26 07:44:32
re.match   re.match 尝试从 字符串的开始 匹配一个模式,如:下面的例子匹配第一个单词。 import re text = "JGood is a handsome boy, he is cool, clever, and so on..." m = re.match(r"(\w+)\s", text) if m: print m.group(0), '\n', m.group(1) else: print 'not match' re.match的函数原型为:re.match(pattern, string, flags) 第一个参数是正则表达式,这里为"(\w+)\s",如果匹配成功,则返回一个Match,否则返回一个None; 第二个参数表示要匹配的字符串; 第三个参数是标致位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 re.search   re.search函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回,如果字符串没有匹配,则返回None。 import re text = "JGood is a handsome boy, he is cool, clever, and so on..." m = re.search(r'\shan(ds)ome\s', text) if m: print m.group(0), m

正则表达式re模块小结

随声附和 提交于 2020-03-26 07:42:19
re模块的常用方法 1、compile(pattern[,flags]) 创建模式对象,一般配合其他方法使用。例如: import re #导入re模块 text = 'All that doth flow we cannot liquid name' #测试用的字符串 pattern = re.compile(r'\bd\w+\b') #编译正则表达式对象,查找以d开头的单词 print(pattern.findall(text)) #使用正则表达式对象的findall()方法 结果是: 2、search(pattern,string[,flags]) && match(pattern,string[,flags]) search()方法是在整个字符串中寻找模式,返回匹配的对象或者None。用于在整个字符串或指定范围中进行搜索。 match()方法是从字符串的开始处匹配模式,返回匹配的对象或者None。用于在字符串开头或指定位置进行搜索,模式必须出现在字符串开头或指定位置。例如: import re #导入re模块 text = 'All that doth flow we cannot liquid name' #测试用的字符串 pattern = re.compile(r'\b[a-zA-Z]{4}\b') #查找4个字母长的单词 print(pattern.match

notepad++正则表达式替换字符串详解

一世执手 提交于 2020-03-25 20:06:36
表达式 说明 \t 制表符. \n 新行. . 匹配任意字符. | 匹配表达式左边和右边的字符. 例如, “ab|bc” 匹配 “ab” 或者 “bc”. [] 匹配列表之中的任何单个字符. 例如, “[ab]” 匹配 “a” 或者 “b”. “[0-9]” 匹配任意数字. [^] 匹配列表之外的任何单个字符. 例如, “[^ab]” 匹配 “a” 和 “b” 以外的字符. “[^0-9]” 匹配任意非数字字符. * 其左边的字符被匹配任意次(0次,或者多次). 例如 “be*” 匹配 “b”, “be” 或者 “bee”. + 其左边的字符被匹配至少一次(1次,或者多次). 例如 “be+” 匹配 “be” 或者 “bee” 但是不匹配 “b”. ? 其左边的字符被匹配0次或者1次. 例如 “be?” 匹配 “b” 或者 “be” 但是不匹配 “bee”. ^ 其右边的表达式被匹配在一行的开始. 例如 “^A” 仅仅匹配以 “A” 开头的行. ” 仅仅匹配以 “e” 结尾的行. () 影响表达式匹配的顺序,并且用作表达式的分组标记. \ 转义字符. 如果你要使用 “\” 本身, 则应该使用 “\\”. 例子: 原始串 str[1]abc[991]; str[2]abc[992]; str[11]abc[993]; str[22]abc[994]; str[111]abc[995]

Dreamweaver 搜索里的正则表达式

孤人 提交于 2020-03-25 20:00:45
这些天要帮人改版网站,说是改版,其实是叫我把别人网站里的界面原物搬下来。用Teleport pro对某站点整站下载之后,用Dreamweaver打开,发现代码里有大量的冗余代码,比如: < tppabs ="http://www.****.com/images/bg.gif" style ="font-size:12px;" > 中的 tppabs 标签( 估计是Teleport pro为了方便其自身更新时加上的标记) < a href ="javascript:if(confirm('http://www.xxx.com/bbs/ \n\n文件并未依 Teleport Pro 取回,因为 服务器报告因为错误的发生导致无法读取。 \n\n你要从服务器上打开它吗?'))window.location='http://www.xxx.com/bbs/'" > 中的javascript代码 如此多的代码最好的办法就是匹配替换了。网上搜索了一下,发现竟然有位老兄遇到跟我一样的问题,按照他的办法,可以通过Dreamweaver的正则表达式匹配进行替换。 在Dreamweaver的帮助里可以找到正则表达式中使用的特殊字符列表。 根据列表写出上面两句冗余代码的匹配是: 匹配tppabs标签: \btppabs="h[^"]*" 匹配javascript代码: href="javascript

editplus正则表达式替换详解

烂漫一生 提交于 2020-03-25 20:00:15
http://hi.baidu.com/enkyo/blog/item/dc310edf22577416632798bb.html editplus正则表达式替换详解 (以下有被改动) 例子: 原始串 str[1]abc[991]; str[2]abc[992]; str[11]abc[993]; str[22]abc[994]; str[111]abc[995]; str[222]abc[996]; str[1111]abc[997]; str[2222]abc[999]; 目标串: abc[1]; abc[2]; abc[11]; abc[22]; abc[111]; abc[222]; abc[1111]; abc[2222]; 处理: 查找串:str"[([0-9]+)"]abc"[[0-9]+"] 替换串:abc["1] 【1】正则表达式应用——替换指定内容到行尾 原始文本如下面两行 abc aaaaa 123 abc 444 希望每次遇到“abc”,则替换“abc”以及其后到行尾的内容为“abc efg” 即上面的文本最终替换为: abc efg 123 abc efg 解决: ① 在替换对话框,查找内容里输入“abc.*” ② 同时勾选“正则表达式”复选框,然后点击“全部替换”按钮 其中,符号的含义如下: “.” =匹配任意字符 “*” =匹配0次或更多 注意

Linux grep

不羁的心 提交于 2020-03-25 15:37:44
Linux grep命令 grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来,它的使用权限是所有用户。 格式 grep [options] 主要参数 ​ [options]主要参数: -c:只输出匹配的行数。 -i:不区分大小写。 -h:查询多文件时不显示文件名。 -l:查询多文件时只输出包含匹配字符的文件名。 -n:显示匹配行及行号。 -s:不显示不存在或无匹配文本的错误信息。 -v:显示不包含匹配文本的所有行。 pattern正则表达式主要参数: \:忽略正则表达式中特殊字符的原有含义。 ^:匹配正则表达式的开始行。 $:匹配正则表达式的结束行。 \ <:从匹配正则表达式的行开始。 \ >:从匹配正则表达式的行结束。 [ ] :单个字符,如[A] 即A符合要求。 [ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求。 。:所有单个字符。 *有字符,长度可以为0。 grep命令常见用法 在文件中搜索一个单词: grep word file_name grep "word" file_name 在多个文件中查找: grep "word" fille_1 file_2 file_3 输出除了word的所有行: greo -v "word" file_name 标记匹配颜色: grep "word" file_name --color