作者PsMonkey (痞子军团团长)
看板RegExp
标题[转录]regex讨论:以<script></script>的拆解regex为例
时间Thu Mar 6 19:54:29 2008
※ [本文转录自 java 看板]
作者: TonyQ (骨头) 看板: java
标题: regex讨论:以<script></script>的拆解regex为例
时间: Thu Mar 6 13:11:29 2008
给痞子:
我知道有regex版,不过对我而言regex在程式语言有必要作为介绍,
一昧的把关系给分离,只是造成认知上的隔阂而已。
当然更进阶的运用或介绍还是得往regex发展,
不过这种程度的基本介绍,程式语言版还是有必要留着的。
but 如果你觉得不符版旨可以自行处理掉 XD
这就像Web_design要不要把 jsp/asp/asp.net/js的问题切割回专版一样,
各有优劣啦。:p
本来这篇是回slalala的文,不过既然写了就贴出来,
看有没有人回响一下。XD
本篇适用对象:
了解regex是作什麽用,有一定regex基础概念的人。
────────────────────────────────
以底下的字串为例
"<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>"
────────────────────────────────
先把握切割的重点
按照解析层级的顺序依序
()是区块 (这个例子没有)
[] 是字
*?+{} 是次数
\是脱逸 (记得Java要写成 \\ 脱逸两次)
[^] 字开头带^为反集合
所以可以先这样切
<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>
转换为
<字1{次数1}script字2{次数2}>字3{次数3}<字4{次数4}脱逸/字5{次数5}
script字六{次数6}>
这样你应该看得出来哪些是可变动的,哪些是完全比对的(浅蓝色字体)。
其中有六个word跟六个次数,基本上都是查表法可以查出来的。
查这个表
http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Pattern.html
字1 : [\\s] 根据api
\s A whitespace character: [ \t\n\x0B\f\r]
一个表示为空白的字元 等义於 [ \t\n\x0B\f\r]
字2 : [^>]
^有反集合的意思所以是 非">"以外的字元
字3 : [\\s\\S]
同字1 另外再加上非白的字元,其实也就是所有的字元。
(其实我认为这可以用
. 取代了)
字4、字5、字6 同字1
至於次数 直接丢去查表吧
反正不外乎三种
(零次或1次) ?
(零次或无限多次 ) *
(一次以上) +
还有一种就是指定次数的 { }
这用法可以指定要出现的次数,也可以用来达到上面三个特殊字元的用途。
--
I am a person, and I am always thinking .
Thinking in love , Thinking in life ,
Thinking in why , Thinking in worth.
I can't believe any of what ,
I am just thinking then thinking ,
but worst of all , most of mine is thinking not actioning...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.115.77.239
1F:推 qrtt1:好复杂 (晕) 03/06 13:52
2F:推 kyoby:经常shell或者perl的这种是基本功啊 03/06 14:54
3F:→ TonyQ:我实在是想说perl是不能拿来当例子 属性不同啊 XDDD 03/06 15:01
4F:推 qrtt1:perl的字串不一定要用", 所以比较方便一点 XD 03/06 15:20
5F:推 kyoby:正则式如果学过编译原理里的有限自动机原理将会好理解不少.. 03/06 15:31
6F:推 jb0802:[\\s]*?这个*?是几次阿 可出现无限多次*和零次或一次? 03/06 16:52
7F:→ TonyQ:0次以上 非GREED的用法 XD 03/06 17:03
--
侃侃长论鲜窒碍 首页:
http://www.psmonkey.idv.tw
众目睽睽无心颤 Blog:
http://ps-think.blogspot.com
茕居少聊常人事
杀头容易告白难 欢迎参观 Java 版(@ptt.cc) \囧/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.228.201.164