查看: 999|回复: 13
|
Regular expression 专区
[复制链接]
|
|
嗯,这里好像没有人讨论 Regular expression, 所以就开了这帖,希望大家来讨论、分享经验 + 技巧
(好像是自己需要吧,呵呵)
需要的朋友可以来这里查找,就像字典一样
查找对象:- [a] [b] const name:String = "[c]";
- [a] = static
- [b] = public 或 private
- [c] = 任意字串
- [a] [b] 可以对调
复制代码 解决方法:- ^(?!//\b)(\t*|\s*)((static)*(\s+)(public|private)|(public|private)(\s+)(static)*)(\s+)const(\s+)\name:String\s*=\s*""(\b\d+\b).(\b\d+\b).(\b\d+\b).(\b\d+\b)
复制代码 问题:
1. 如何判断对象不是以 // 开始(上面的方法里已经做到,不过是否有更理想的做法?)
例- // static public const name:String = "Default";
复制代码 2. 如何判断对象不是在 /* 与 */ 之间
例- /*
- static public const name:String = "Default";
- */
- /* static public const name:String = "Default"; */
复制代码
[ 本帖最后由 sson 于 17-10-2007 10:31 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 19-10-2007 10:40 AM
|
显示全部楼层
我比较想知道regex的方向是否统一了,因为在.net 3.0里好像有新的regex syntax, 可是regex不是应该是超越语言的咩? |
|
|
|
|
|
|
|
发表于 19-10-2007 12:07 PM
|
显示全部楼层
第一题:
/^\/\//
^ 这个是开始
\/ 因为不能直接match /所以需要有\来delimit 他。这个是match所有,有//。如果要不要match的话,在program的logic 来弄咯。
第二题:
/^(\/\*).+(\*\/)$/
^(\/\*) 是来match /*。()来把pattern集合。
.是用来match所有的character除了new line。
+是来repeat之前的pattern。在这里是match . 的。
(\*\/)$是用来match */,像前面一样 只是$这个是来match尾端的。
老实讲我是用perl来试的。但是很多programming language 是perl compatible的。
[ 本帖最后由 sweemeng 于 19-10-2007 12:22 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 19-10-2007 01:01 PM
|
显示全部楼层
第一题 :
^[ \t]*\/\/[^\/]
参考了书, trial and error 才作到。
第二题 :
我参考的书已经有了答案, 我就不写了, 让大家作作看。
原帖由 阿牙木 于 19-10-2007 10:40 AM 发表
我比较想知道regex的方向是否统一了,因为在.net 3.0里好像有新的regex syntax, 可是regex不是应该是超越语言的咩?
如果是说.Net 2.0 Web Form 的 RegexValidator 的 regular expression 的话, 那个是 javascript 的 regexp 用的 , 跟 原始PERL 用的不一样。
sson 用的好像也是 javascript 里用的 regexp
[ 本帖最后由 jangancari 于 19-10-2007 01:17 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 19-10-2007 02:12 PM
|
显示全部楼层
难怪我看不懂他们的REGEX.
我一直都以为REGEX是CROSS-LANGUAGE 和CROSS-PLATFORM的咧. |
|
|
|
|
|
|
|
发表于 19-10-2007 02:44 PM
|
显示全部楼层
JAVA , JAVASCRIPT 和 VC++ 有一点不同... |
|
|
|
|
|
|
|
发表于 19-10-2007 03:48 PM
|
显示全部楼层
那 grep, vi, awk , sed 等等用的呢? |
|
|
|
|
|
|
|
楼主 |
发表于 20-10-2007 03:59 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 20-10-2007 11:06 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 20-10-2007 11:14 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 20-10-2007 11:36 PM
|
显示全部楼层
我看了你的link , 应该是 Perl 是跟 POSIX 的, 反而javascript 不是。
在 POSIX 没有 \d 代表 digit , 在 Perl 里多用 [0-9] 来表示。 javascript 里还有很多 类似 \d \w 等等的POSIX 没有的东西。 |
|
|
|
|
|
|
|
发表于 21-10-2007 12:04 AM
|
显示全部楼层
第二题:
之前的呢不能找newline。
改新版
/^(\/\*)(.|\n)+(\*\/)$/
(.|\n)+
. 是找所有的character除了newline。但是呢\n是找newline 的。
但是好像只能在perl走,但是grep走不到。因为grep本身是不能match newline 的。 |
|
|
|
|
|
|
|
发表于 22-10-2007 11:25 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 9-1-2008 04:11 PM
|
显示全部楼层
好想 把 这些 从新 学好,
因为 时常 要用。。。。 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|