. : : ClassiClub ForuM : : .

会员中心 论坛帮助 日历事件 标记论坛已读
返回   精品技术论坛 » 技术论坛 » 『软件使用』

『软件使用』: 电脑软件推荐, 电脑软件使用, 经验分享



发表新主题 回复
 
主题工具
foxme
 
foxme 的头像
核心会员
 
资 料:
注册日期: Mar 2001
帖子: 4,022 声望值: 3
精华: 0,解答: 29
#31 旧 2013-10-06, 14:19:57 默认
foxme 当前离线  

8、对于.*我还是有疑问,它会不会把后面的第字也匹配了?规则是什么,匹配到第字就终止.的匹配吗? //这个设计到惰性匹配和贪婪匹配.

样本: 第 九章 (第9章)

贪婪就是尽可能多的匹配, 一般正则默认的模式. 比如搜索: "第.*章", 这时会匹配: " 九章 (第9"

而惰性匹配就是尽可能少的匹配, 需要用?界定一下. 比如搜索: "第.*?章", 这时会匹配: " 九"

惰性匹配也有按照数量匹配的, 比如搜索: "第.{1,2}章", 这时会匹配" 九"
回复时引用此帖
nicol
 
nicol 的头像
热心会员
 
资 料:
注册日期: Jun 2001
帖子: 11,683 声望值: 6
精华: 0,解答: 11
#32 旧 2013-10-06, 15:40:23 默认
nicol 当前离线  

引用:
作者: foxme 查看帖子
nicol 这个似乎只能匹配 第xx章 开头的行. 如果他前面有个空格或者字符什么的, 就不能匹配整行. 应该改为:

^.*第[^章]*?章.*$ //确定第和章之间是非"章"字的实例.

river01 我对正则也很有兴趣, 我借你的帖子一起学习. 谢谢.
是的,呵呵我没注意:blush;
回复时引用此帖
nicol
 
nicol 的头像
热心会员
 
资 料:
注册日期: Jun 2001
帖子: 11,683 声望值: 6
精华: 0,解答: 11
#33 旧 2013-10-06, 15:45:27 默认
nicol 当前离线  

引用:
作者: river01 查看帖子
我原意想提取有用的章节名所以前面的不用考虑,具体应用要根据实际情况。

8、对于.*我还是有疑问,它会不会把后面的第字也匹配了?规则是什么,匹配到第字就终止.的匹配吗?
建议你安装一个regexbuddy,里面有详细的解释,很直观的

贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配,要详细解释的话你得找个专门的教材看了,呵呵
回复时引用此帖
river01
 
river01 的头像
核心会员
 
资 料:
注册日期: Dec 2002
帖子: 2,595 声望值: 3
精华: 0,解答: 6
#34 旧 2013-10-06, 16:42:06 默认
river01 当前离线  

引用:
作者: foxme 查看帖子
样本: 第 九章 (第9章)"第.*章", 这时会匹配: " 九章 (第9"而惰性匹配......
贪婪模式匹配"第"和最后那个"章"
非贪婪模式匹配"第"和最先那个"章"
回复时引用此帖
MacOS
 
MacOS 的头像
热心会员
 
资 料:
注册日期: Aug 2002
帖子: 13,396 声望值: 5
精华: 0,解答: 129
#35 旧 2013-10-06, 18:10:15 默认
MacOS 当前离线  

7和8都是解释器的解释差异,中括号是内含字符的集合,\S包括了所有非空格字符,同样含有换行符在内,\s补上了空格,事实上已经是所有字符集,这种逻辑写法等价于其他有反义的字符转义符,像\w\W,\d\D,只要编辑器能解释\s\S,这两个同样表示所有字符集,.*是指^.*第[^章]*?章.*$吧,这段前后都有限定字符,匹配范围限定在一行以内,只要一行内有一段字符符合就行,如果是EM的专业版模式,则突破了换行的限制,会从光标起始一直到限定行数内寻找是否存在匹配项


HIDDEN MESSAGE LEVEL 3
14863 159357 789 159357 3245687 3684
回复时引用此帖
foxme
 
foxme 的头像
核心会员
 
资 料:
注册日期: Mar 2001
帖子: 4,022 声望值: 3
精华: 0,解答: 29
#36 旧 2013-10-07, 00:29:55 默认
foxme 当前离线  

昨日我学习了一下emeditor的正则引擎, 他是基于最给力的perl的正则库的, 但是做了一些简化.

emeditor虽然基于perl, 但是恐怕有些删减, 相比而言有这么几个短板:
• 不支持 正则递归(recursion)下降算法 (?R) http://www.blueidea.com/tech/web/2009/7206_6.asp
• 不支持 大于9的索引获取(indexable captures)
• 不支持搜索追踪构建 embedded code, 这个一般debug用. http://my.safaribooksonline.com/book...ancements/i213
• 不支持最小组团 atomic groups http://www.regular-expressions.info/atomic.html
• 不支持命名捕获组 named capture http://www.regular-expressions.info/named.html

以此看来, emeditor的正则是很完善的. 值得好好学习.
回复时引用此帖
MacOS
 
MacOS 的头像
热心会员
 
资 料:
注册日期: Aug 2002
帖子: 13,396 声望值: 5
精华: 0,解答: 129
#37 旧 2013-10-07, 03:57:23 默认
MacOS 当前离线  

引用:
作者: foxme 查看帖子
昨日我学习了一下emeditor的正则引擎, 他是基于最给力的perl的正则库的, 但是做了一些简化. emeditor虽然基于perl, 但是恐怕有些删减, 相比而言有这么几个短板:• 不支持 正则递归(recursion)下降算法 (?R) [url]http://www.blueidea.com/tech/web......
EM是双字节特化的编辑器,像[:punct:]之类的写法是特有的,为了降低双字节的编写难度,一些规则经常用起来会很奇怪
回复时引用此帖
foxme
 
foxme 的头像
核心会员
 
资 料:
注册日期: Mar 2001
帖子: 4,022 声望值: 3
精华: 0,解答: 29
#38 旧 2013-10-07, 05:46:21 默认
foxme 当前离线  

引用:
作者: MacOS 查看帖子
EM是双字节特化的编辑器,像[:punct:]之类的写法是特有的,为了降低双字节的编写难度,一些规则经常用起来会很奇怪
实际上emeditor是支持[[:unicode:]]这样的写法的. 在他的帮助里面有说明. 有趣的是, 他的写法比你的举例还要复杂一些. 不过这些不经常使用, 也就unicode这个会用到而已.

emeditor是挺不错的. 还希望@river01多多提问, 我也顺道跟着长见识.

我个人目前对以下几个emeditor支持的正则很不熟悉, 不知道有没有高手能解释解释?

(?:pattern)
(?=pattern)
(?!pattern)
(?<=pattern)
(?<!pattern)

非常感谢.
回复时引用此帖
river01
 
river01 的头像
核心会员
 
资 料:
注册日期: Dec 2002
帖子: 2,595 声望值: 3
精华: 0,解答: 6
#39 旧 2013-10-07, 12:35:53 默认
river01 当前离线  

(?:Expression),它表示所在位置可以匹配 Expression 我自己理解是不是可以与(Expression)?等效
(?=Expression) 顺序肯定环视,表示所在位置右侧能够匹配Expression
(?!Expression) 顺序否定环视,表示所在位置右侧不能匹配Expression
(?<=Expression) 逆序肯定环视,表示所在位置左侧能够匹配Expression
(?<!Expression) 逆序否定环视,表示所在位置左侧不能匹配Expression
后面的四个只表示判断条件,不占宽。
回复时引用此帖
MacOS
 
MacOS 的头像
热心会员
 
资 料:
注册日期: Aug 2002
帖子: 13,396 声望值: 5
精华: 0,解答: 129
#40 旧 2013-10-07, 13:22:53 默认
MacOS 当前离线  

引用:
作者: foxme 查看帖子
实际上emeditor是支持[[:unicode:]]这样的写法的. 在他的帮助里面有说明. 有趣的是, 他的写法比你的举例还要复杂一些. 不过这些不经常使用, 也就unicode这个会用到而已.

emeditor是挺不错的. 还希望 river01多多提问, 我也顺道跟着长见识.

我个人目前对以下几个emed......
对,帮助都有写,这些定义都是其他编辑器所没有的,换其他正则写这些规则会很长,[:unicode:]倒比较少用,俺记得EM里还有不正规的替代写法
上楼有解释用法,注意的是后两个预查,EM中预查内容包含*等通配符的话是不能用的
回复时引用此帖
river01
 
river01 的头像
核心会员
 
资 料:
注册日期: Dec 2002
帖子: 2,595 声望值: 3
精华: 0,解答: 6
#41 旧 2013-10-07, 13:48:26 默认
river01 当前离线  

引用:
作者: MacOS 查看帖子
EM中预查内容包含*等通配符的话是不能用的
这个提醒很好,免得以后走弯路。
回复时引用此帖
river01
 
river01 的头像
核心会员
 
资 料:
注册日期: Dec 2002
帖子: 2,595 声望值: 3
精华: 0,解答: 6
#42 旧 2013-10-07, 14:16:44 默认
river01 当前离线  

(?<=^|(第.+[章集])).*?(?=$|(第.+[章集]))
1、这个我在EM里运行出错,但语法能理解。
2、如果想在[章集]后面加上固定的"空格加4个汉字"的章节名字,如何表示4个汉字?

此帖于 2013-10-07 14:33:46 被 river01 编辑. .
回复时引用此帖
nicol
 
nicol 的头像
热心会员
 
资 料:
注册日期: Jun 2001
帖子: 11,683 声望值: 6
精华: 0,解答: 11
#43 旧 2013-10-07, 16:05:20 默认
nicol 当前离线  

引用:
作者: river01 查看帖子
(?<=^|(第.+[章集])).*?(?=$|(第.+[章集]))
1、这个我在EM里运行出错,但语法能理解。
2、如果想在[章集]后面加上固定的"空格加4个汉字"的章节名字,如何表示4个汉字?
汉字这个问题比较复杂,不知道别人是怎么解决的,我的解决方法是这样[\u2E80-\u9FFF]

按你的问题,4个汉字也就是[\u2E80-\u9FFF]{4}

这里的[\u2E80-\u9FFF]基本可以涵盖中日韩在内的简繁体双字节文字,如果仅仅需要中文可以用[\u4E00-\u9FFF]包括简繁体
回复时引用此帖
river01
 
river01 的头像
核心会员
 
资 料:
注册日期: Dec 2002
帖子: 2,595 声望值: 3
精华: 0,解答: 6
#44 旧 2013-10-07, 17:09:17 默认
river01 当前离线  

引用:
作者: nicol 查看帖子
如果仅仅需要中文可以用[\u4E00-\u9FFF]包括简繁体
谢谢,那么中文双字节标点符号如,。、?!•:;¥是什么范围

此帖于 2013-10-07 17:24:38 被 river01 编辑. .
回复时引用此帖
MacOS
 
MacOS 的头像
热心会员
 
资 料:
注册日期: Aug 2002
帖子: 13,396 声望值: 5
精华: 0,解答: 129
#45 旧 2013-10-07, 17:51:39 默认
MacOS 当前离线  

引用:
作者: river01 查看帖子
(?<=^|(第.+[章集])).*?(?=$|(第.+[章集]))
1、这个我在EM里运行出错,但语法能理解。
2、如果想在[章集]后面加上固定的"空格加4个汉字"的章节名字,如何表示4个汉字?
上面刚刚说完……预查里不能用通配,+是不行的
EM不能用UNICODE模式表示准确的范围,你可以试验一下[\u0000]——里面的UNICODE字符随便写,虽然这个表达式只应该匹配其中一个UNICODE字符,但在EM使用时是指代所有UNICODE字符,中文范围俺也忘了哪里到哪里了,回头查一下
回复时引用此帖
发表新主题 回复

主题工具

论坛规则  发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子
论坛启用 vB 代码
版面启用 表情符号
版面启用 [IMG] 代码
版面禁用 HTML 代码


所有时间均为北京时间, 现在的时间是 05:17:07.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号