随笔分类 -  正则表达式

摘要:mobaxterm的正则引擎无法支持完整正则语法。 下面正则表达可以匹配类似 [ abc E ddd ] 类似的语法行。 其中排出语法[^]中的字符顺序变化后就会导致正则语法错误。所以也一直没看懂mobaxterm正则真正支持的正则语法是啥。感觉就是时而能用。 \[[^][]+ E [^][]+\] 阅读全文
posted @ 2023-02-09 20:26 dzqabc 阅读(200) 评论(0) 推荐(0)
摘要:正则表达式通常被用来检索或替换符合某个模式的文本内容,编写正则是开发人员的必备技能。简单的正则表达式一下就能看懂含义,但是复杂的正则理解起来就很困难了。有了这款可视化的正则调试工具,以后编写正则表达式就轻松多了,赶紧试试。Debuggex:http://www.debuggex.com/ 阅读全文
posted @ 2015-11-01 20:31 dzqabc 阅读(438) 评论(0) 推荐(0)
摘要:Emeditor 目前来说是我个人感觉非常不错的一款记事本软件, 其中查找替换功能由于支持正则表达式而显得非常强大.^[ /t]*/n这个正则表达式代表所有的空行,指含有零个或零个以上空格或制表符、以换行符结尾、不含其它字符的行。(^|(?<=中国)).*?(?=中国|$)用正则表达式匹配特定字符串外的所有字符。指除“中国”外的所有其它字符,类似于反选功能。^[ /t]+查找以上字符,并替换为空,可删除行首空白(包括全半角空格和制表符)。[ /t]+$查找以上字符,并替换为空,可删除行末空白(包括全半角空格和制表符)。^[ /t]+|[ /t]+$查找以上正则表达式,并替换为空,可删除行 阅读全文
posted @ 2012-10-15 23:03 dzqabc 阅读(11487) 评论(0) 推荐(0)
摘要:1.例子,查找不以baidu开头的字符串。baidu.comsina.com.cn正则:^(?!baidu).*$ 匹配结果就是第2行,也就是第1行被排除了这里使用了零宽度断言(?!exp),注意,我们有一个向前查找的语法(也叫顺序环视) (?=exp)(?=exp) 会查找exp之前的【位置】如果将等号换成感叹号,就变成了否定语义,也就是说查找的位置的后面不能是exp一般情况下?!要与特定的锚点相结合,例如^行开头或者$行结尾,那么上面的例子的意思如下:^(?!baidu).*$ 先匹配一个行开头的位置,并且要求接下来的位置的后面不是baidu这个字符串。这样由于第一行^之后的位置后面是ba 阅读全文
posted @ 2012-05-13 23:51 dzqabc 阅读(7270) 评论(0) 推荐(0)
摘要:Emeditor10:新的递归正则表达式(?n:true_expression:false_expression)增加在正则表达式语法中(该语法用于替换到的正则表达式). Emeditor启动慢且经常出现启动不起来问题 清理无用配置项可以大大加快启动速度。最好清理重新生成一下 阅读全文
posted @ 2010-08-26 22:07 dzqabc 阅读(392) 评论(0) 推荐(0)
摘要:正则表达式零宽断言可以叠加使用:(?<=\d)(?<!1)\l(?!6) 零宽断言中的Pattern必需是固定长度的,因而不能其中不能出现不定数量匹配,如:(?<=\l\d{3,4})a (?<=\l\d*)a \b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。 \B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er&# 阅读全文
posted @ 2010-04-15 17:14 dzqabc 阅读(389) 评论(0) 推荐(0)
摘要:零宽断言地球人,是不是觉得这些术语名称太复杂,太难记了?我也和你一样。知道有这么一种东西就行了,它叫什么,随它去吧!“无名,万物之始 ... ”接下来的四个用于查找在某些内容 ( 但并不包括这些内容 ) 之前或之后的东西,也就是说它们像 \b,^,$ 那样用于指定一个位置,这个位置应该满足一定的条件 ( 即断言 ) ,因此它们也被称为零宽断言。最好还是拿例子来说明吧:断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。(?=exp) 也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式 exp 。比如 \b\w+(?=ing\b) ,匹配以 ing 结尾的 阅读全文
posted @ 2010-01-17 00:19 dzqabc 阅读(414) 评论(0) 推荐(1)
摘要:命名分组 (?<name>xxx) 与普通分组一样的功能,并且将匹配的子字符串捕获到一个组名称或编号名称中。在获得匹配结果时,可通过分组名进行获取。 说明命名捕获根据左括号的从左到右的顺序按顺序编号(与非命名捕获类似),但在对所有非命名捕获进行计数之后才开始对命名捕获进行编号。DEELX 允许多个命名分组的名字相同,这时它们捕获到的内容会放在同一个分组编号下。在逻辑上,它们是同一个分组。如果两个命名相同分组之间有包含关系,那么被包含的那个分组将不进行捕获。 阅读全文
posted @ 2010-01-17 00:13 dzqabc 阅读(7681) 评论(0) 推荐(1)
摘要:Multiline修饰的是^与$,就是说没有Multiline的时候,把^和$与当作每一行(\n结尾的)的开头和结束来匹配,有Multiline 的时候是与整个字符串的开头和结尾匹配;Singleline修饰的是'.'的时候,就是说有Singleline的时候匹配的是所有字符(包 括\n),没有Singleline的时候,匹配的是除\n外的所有字符。 阅读全文
posted @ 2010-01-17 00:07 dzqabc 阅读(816) 评论(0) 推荐(0)
摘要:分枝条件 |不幸的是,刚才那个表达式也能匹配010)12345678或(022-87654321这样的“不正确”的格式。要解决这个问题,我们需要用到分枝条件。正则表达式里的分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。听不明白?没关系,看例子:0\d{2}-\d{8}|0\d{3}-\d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。\(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}这个表达式匹配3位区 阅读全文
posted @ 2010-01-16 23:36 dzqabc 阅读(1170) 评论(1) 推荐(0)
摘要:有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义:表3.常用的反义代码代码/语法 说明\W 匹配任意不是字母,数字,下划线,汉字的字符\S 匹配任意不是空白符的字符\D 匹配任意非数字的字符\B 匹配不是单词开头或结束的位置[^x] 匹配除了x以外的任意字符[^aeiou] 匹配除了aeiou这几个字母以外的任意字符例子:\S+匹配不包含空白符的字符串。<a[^>]+>匹配用尖括号括起来的以a开头的字符串。 阅读全文
posted @ 2010-01-16 23:35 dzqabc 阅读(3549) 评论(0) 推荐(1)
摘要:.*? 正则引擎默认是贪婪的,当出现"*"时,它会尽量去匹配尽可能长的字符串 一个用于修正以上问题的可能方案是用"*"的惰性代替贪婪性。你可以在"*"后面紧跟一个问号"?"来达到这一点 这告诉正则引擎,尽可能少的重复上一个字符 阅读全文
posted @ 2010-01-16 23:27 dzqabc 阅读(12318) 评论(0) 推荐(1)
摘要:反向引用 \nnn对指定分组已捕获的字符串进行引用,对当前匹配的字符串,引用指定分组捕获到的字符串,主要用于文本的替换。说明DEELX 支持的反向引用格式: 反向引用说明\nnn对指定编号的分组进行反向引用\g<name>对指定名字的命名分组进行反向引用\k<name>\k'name'另外,如果被引用的捕获组(括号对)未进行捕获时,则该反向引用将匹配失败。DEELX 最多将 3 位数字识别为反向引用,如果想在表达式中表示 \1 外加一个字符 2 ,那么应该写成 \0012。在 DEELX 中,不管是否有第 12 对括号,写成 \12 都表示对第 12 对 阅读全文
posted @ 2010-01-16 23:19 dzqabc 阅读(2688) 评论(0) 推荐(0)
摘要:*,+,{2},{5,12}这几个匹配重复方式。下面是正则表达式中所有的限定符(指定数量的代码,例如*,{5,12}等):表2.常用的限定符代码/语法 说明* 重复零次或更多次+ 重复一次或更多次? 重复零次或一次{n} 重复n次{n,} 重复n次或更多次{n,m} 重复n到m次下面是一些使用重复的例子:Windows\d+匹配Windows后面跟1个或更多数字^\w+匹配一行的第一个单词(或整个字符串的第一个单词,具体匹配哪个意思得看选项设置) 阅读全文
posted @ 2010-01-16 23:14 dzqabc 阅读(937) 评论(0) 推荐(0)
摘要:注释(?#comment)小括号的另一种用途是通过语法(?#comment)来包含注释。例如:2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199)。要包含注释的话,最好是启用“忽略模式里的空白符”选项,这样在编写表达式时能任意的添加空格,Tab,换行,而实际使用时这些都将被忽略。启用这个选项后,在#后面到这一行结束的所有文本都将被当成注释忽略掉。例如,我们可以前面的一个表达式写成这样: (?<= # 断言要匹配的文本的前缀 <(\w+)> # 查找尖括号括起来的字母或数字(即HTML/XML标签) ) # 前缀结 阅读全文
posted @ 2010-01-16 23:10 dzqabc 阅读(3566) 评论(0) 推荐(1)
摘要:在构造正则表达式之后,就可以象数学表达式一样来求值,也就是说,可以从左至右并按照一个优先权顺序来求值。 下表从最高优先级到最低优先级列出各种正则表达式操作符的优先权顺序:操作符 描述\ 转义符(), (?:), (?=), [] 圆括号和方括号*, +, ?, {n}, {n,}, {n,m} 限定符^, $, \anymetacharacter 位置和顺序| "或"操作 阅读全文
posted @ 2010-01-16 23:00 dzqabc 阅读(702) 评论(0) 推荐(0)
摘要:一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。 这里有一些可能会遇到的正则表达式示例: JScript VBScript 匹配/^\[ \t]*$/ ^\[ \t]*$ 匹配一个空白行。/\d{2}-\d{5}/ \d{2}-\d{5} 验证一个ID 号码是否由一个2位数字,一个连字符以及一个5位数字组成。/<(.*)>.*<\/\1>/ <(.*)>.*<\/\1> 匹配一个 HTM 阅读全文
posted @ 2010-01-16 22:57 dzqabc 阅读(221) 评论(0) 推荐(0)
摘要:只能输入数字:"^[0-9]*$"只能输入 n 位的数字:"^\d{n}$"只能输入至少 n 位的数字:"^\d{n,}$"只能输入 m ~ n 位的数字:"^\d{m,n}$"只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"只能输入有 1~3 位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"只能输入非零的正整数:"^\+?[1-9][0-9 阅读全文
posted @ 2009-12-23 23:31 dzqabc 阅读(319) 评论(0) 推荐(0)
摘要:单行模式允许小数点(.)匹配包括换行符(\n)在内的任意字符(出自Regex Match Tracer).依据<<Microsoft Windows 脚本技术>>chm文档中所言:小数点(.)匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。 正则表达式对象模式仅有如下三种:g (全文查找出现的所有 pattern) i (忽略大小写) m (多行查找) 即没有单行匹配模式但chm文档中所说要匹配包括 '\n' 在内的任何字符,请使用象  阅读全文
posted @ 2009-12-12 17:38 dzqabc 阅读(1783) 评论(0) 推荐(2)