正则表达式太难了...能推荐些针对小白写的很好的教程吗

2013-01-16 14:26:23 +08:00
 n00b1
我在看这个视频,一头雾水啊
http://v.youku.com/v_show/id_XNDk3OTQxODcy.html
8417 次点击
所在节点    问与答
23 条回复
046569
2013-01-16 14:27:14 +08:00
试试这个,希望对你有用.
http://deerchao.net/tutorials/regex/regex.htm#ad
n00b1
2013-01-16 14:31:41 +08:00
@046569 30分钟入门?我马上开始!感谢
haiyang416
2013-01-16 15:02:38 +08:00
学习一样新事物时应该从最基本的地方开始,不要被正则的各种符号所迷惑,正则的规则其实很简单。

我们通常使用正则来描述语言,比如“hello”,因此你可以把正则看成一个集合,例如:空集合为{}(一般记作ε),一个字母集合为{a}。

正则是最基本的运算规则只有三条:

1.并运算,记作 X|Y,你可以理解为加法。例如a|b所表示的集合为{a,b}
2.连接运算,记作XY,你可以理解为乘法。例如X为a|b,Y为c|d,那么XY的集合为{ac,ad,bc,cd}
3.克林闭包运算(Kleene Closure),记作X*,你可以理解为零个或者多个X连接。例如a*所表示的集合为{ε,a,aa,aaa,......}

现在你已经了解正则的全部规则了,那些复杂的规则你可以看作是语法糖,都可以用这三个规则来描述。举几个例子:

1.hello,即5个字母的连接运算:hello
2.[ab],即为ab两个字母的并运算:a|b
3.[0-9],即为并运算0|1|2|3|4|5|6|7|8|9
4.A?,即为并运算A|ε
5.A+,即为AA*
adspe
2013-01-16 15:29:45 +08:00
上Youtube看吧。一语点醒梦中人。
jkeylu
2013-01-16 15:34:25 +08:00
这个工具也蛮有用的

http://www.regexper.com/
jiangpeng
2013-01-16 15:39:31 +08:00
余晟的《正则指引》不知如何
http://book.douban.com/subject/10591096/
xavierskip
2013-01-16 15:41:12 +08:00
n00b1
2013-01-16 15:43:21 +08:00
@xavierskip 这个图真太好了,感谢~
n00b1
2013-01-16 16:09:51 +08:00
@046569
@haiyang416
@adspe
@jkeylu
@jiangpeng
@xavierskip

不知道有没有‘反向生成正则’的服务呢?给一段目标文档内容,同时给出希望从其中找到的内容,改服务自动生成正则
bitsmix
2013-01-16 16:13:48 +08:00
买本猫头鹰就够了
bitsmix
2013-01-16 16:17:56 +08:00
刚看视频。。用python做入门讲解。。怎么说呢……
视频内容里面掺杂太多了和 正则 本身无关的内容了(比如 python 的re里面 有什么方法)
还是买本猫头鹰看吧

http://book.douban.com/subject/2154713/
nervouna
2013-01-16 16:30:15 +08:00
和我一样的初学者,只需要了解正则解决问题的基本思路,语法知道个大概就可以了。等到真正要用的时候,再具体问题具体分析,网上找找例子,看看别人的思路是怎样的。这样可能会更好。
Sunyanzi
2013-01-16 17:18:17 +08:00
正则基本就是死记硬背 ... 学基础的匹配半小时真就够了 ...

正则里所有比较麻烦的东西都以 (? 开头 ...

比如 Assertions 和比较复杂的 Subpatterns 这一类东西 ...

看到就直接跳过好了 ... 先学会简单匹配然后在使用中再慢慢看都来得及 ...

另外你提到了反向正则生成服务 ... 我琢磨了一下要不要自己写一个 ...

但有个严重的问题是你要提供怎样的输入呢 ..?

比如你输入了一段很长的文字 ... 例如 abcdefgh123456 ...

然后你希望从中匹配到 cde ... 我生成的正则一定是 /cde/ ...

如果你希望描述匹配 d 到 1 之间这整段内容 ... 那么你要如何描述 ..?

/d.*1/ 这样么 ..? 这本身就已经是正则了 ...

或者我提供语法类似 ...

d[anything][anylength][word|numberic][length=1]

然后我把它翻译成 /d.*[a-z0-9]{1}/ 这样你觉得有意义么 ..?
jimbinc
2013-01-16 17:21:17 +08:00
正则指引,一本搞定
ThunderEX
2013-01-16 17:23:29 +08:00
不可能有这种服务吧。
对正则来说,怎么匹配不是问题。真正的问题是怎么排除。
pepsin
2013-01-16 17:27:39 +08:00
请用www.rubular.com自己多试验。Mac下也可使用Reggy做试验。
ericFork
2013-01-16 17:55:26 +08:00
sivacohan
2013-01-16 18:23:08 +08:00
正则也要看看(),这里面有个东西叫反向引用。
python 的re模块提供了?P <name >,使用groupdics,可以获得一个字典,很好用。
加上@haiyang416 的,基本正则就可以用了,只不过写的比较长而已。
如果对正则的性能有需求,建议看看精通正则表达式,和你使用正则时候的语言。
freefcw
2013-01-16 18:26:19 +08:00
@jiangpeng 正则指引有比较深入的东西,还不错。个人觉得正则表达式很适合入门刚开始
Mutoo
2013-01-16 20:00:06 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/57772

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX