佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 999|回复: 13

Regular expression 专区

[复制链接]
发表于 17-10-2007 10:19 PM | 显示全部楼层 |阅读模式
嗯,这里好像没有人讨论 Regular expression, 所以就开了这帖,希望大家来讨论、分享经验 + 技巧
(好像是自己需要吧,呵呵
需要的朋友可以来这里查找,就像字典一样


查找对象:
  1. [a] [b] const name:String = "[c]";

  2. [a] = static
  3. [b] = public 或 private
  4. [c] = 任意字串

  5. [a] [b] 可以对调
复制代码
解决方法:
  1. ^(?!//\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. 如何判断对象不是以 // 开始(上面的方法里已经做到,不过是否有更理想的做法?)
  1. // static public const name:String = "Default";
复制代码
2. 如何判断对象不是在 /* 与 */ 之间
  1. /*
  2. static public const name:String = "Default";
  3. */
  4. /* static public const name:String = "Default"; */
复制代码

[ 本帖最后由 sson 于 17-10-2007 10:31 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

阿牙木 该用户已被删除
发表于 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++ 有一点不同...
回复

使用道具 举报

Follow Us
发表于 19-10-2007 03:48 PM | 显示全部楼层
那 grep, vi, awk , sed 等等用的呢?
回复

使用道具 举报

 楼主| 发表于 20-10-2007 03:59 PM | 显示全部楼层
原帖由 sweemeng 于 19-10-2007 12:07 PM 发表
第二题:
/^(\/\*).+(\*\/)$/

这个只是查找不以 /* 开始和不以 */ 结束,中间什么也可以吧?
并不能断定要查找的对象不被 /* 和 */ 包含。

以下是需要排除的
  1. 1.
  2. /* [查找对象] */
  3. 2.
  4. /*
  5. [查找对象]
  6. */
  7. 3.
  8. /*
  9. abcd
  10. [查找对象]
  11. */
复制代码
原帖由 jangancari 于 19-10-2007 01:01 PM 发表
第二题 :
我参考的书已经有了答案, 我就不写了, 让大家作作看。

不要做做看啦,这里可是等救命的呀




其实小章鱼也不清楚 regexp 是不是有大家所谓的 cross languages
不过感觉一些基本的指令都是一样的,像
(),^,$,\b,\s,\t,等等
回复

使用道具 举报


ADVERTISEMENT

发表于 20-10-2007 11:06 PM | 显示全部楼层
原帖由 阿牙木 于 19-10-2007 02:12 PM 发表
难怪我看不懂他们的REGEX.

我一直都以为REGEX是CROSS-LANGUAGE 和CROSS-PLATFORM的咧.


如果他们选择跟Perl 的原始regular expression 的话, 就cross 咯, 但javascript 不跟。


原帖由 tensaix2j 于 19-10-2007 03:48 PM 发表
那 grep, vi, awk , sed 等等用的呢?


grep , awk , sed 用的就跟Perl 的一样或是subset 。 vi 就不清楚。

原帖由 sson 于 20-10-2007 03:59 PM 发表

不要做做看啦,这里可是等救命的呀


我就直接抄 “lex & yacc " l里 C source code analyzer topic 里 的rule

^[ \t]*"/*".*"*/"[ \t]*\n


原帖由 sson 于 20-10-2007 03:59 PM 发表
其实小章鱼也不清楚 regexp 是不是有大家所谓的 cross languages
不过感觉一些基本的指令都是一样的,像
(),^,$,\b,\s,\t,等等


像\d \w 就不在原始Perl 版, 我用 .Net Regexp Validator 才知道javascript 用的不太一样。

[ 本帖最后由 jangancari 于 20-10-2007 11:36 PM 编辑 ]
回复

使用道具 举报

发表于 20-10-2007 11:14 PM | 显示全部楼层
这篇应该可以对POSIX regexp解释得很清楚。至于Perl我就不清楚和POSIX有什么不一样。通常都是需要用到时在作参考

http://www.opengroup.org/onlinepubs/007908799/xbd/re.html
回复

使用道具 举报

发表于 20-10-2007 11:36 PM | 显示全部楼层
原帖由 苦瓜汤 于 20-10-2007 11:14 PM 发表
这篇应该可以对POSIX regexp解释得很清楚。至于Perl我就不清楚和POSIX有什么不一样。通常都是需要用到时在作参考

http://www.opengroup.org/onlinepubs/007908799/xbd/re.html


我看了你的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 | 显示全部楼层
好想 把 这些 从新 学好,
因为 时常 要用。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 21-5-2024 05:14 AM , Processed in 0.075529 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表