如何構建一種面向html 標籤的正則表達式語法?
在處理字符串的過程中,正則表達式有著不可替代的位置。現在的計算機高級語言中都有相應的正則表達式支持包。
如果我們把一個網頁中html 代碼當作一個有結構的字符串,那麼如何用一種類似正則表達式的方式來提取想要的html標籤(tags)呢?
這裡先不考慮如何實現,而先考慮如何用一種類正則表達式的方式來描述html標籤。要取得一個html標籤(tag),需要知道該標籤的2類屬性:
1、標籤的位置;
2、標籤本身的屬性;
比如在下面的html網頁中:
<html>
<body>
<div id="bodywrapper">
<div id="leftwrapper">
</div>
<div id="rightwrapper">
<div>
<div>
<div>
<div>
</div>
</div>
</body>
</html>
如果想提取上面html代碼中class 是column的第二個div 標籤,那麼需要我指定該div的id 和class 和位置信息。現在的問題是:如何設計一個滿足上述要求的表達語法呢?
比如:
gettag:div{tag-name:div;tag-position:2;tag-class:column;tag-id:; tag-content:;}
tag-parent{tag-name:div;tag-position:2;tag-class:column;tag-id:; tag-content:;}
tag-child{......}
上面這是一種易於理解的描述式的語法。
或者類似python的語法:
gettag:div
tag-name:
tag-id:
tag-position:2
tag-class:column
tag-content:
tag-parent:
tag-name:
tag-id:
tag-position:2
tag-class:column
tag-content:
tag-child:
tag-type:table
不知道大家有沒有更適合的語法表現形式。只要能合理的設計這個表達語法,那麼後繼的工作就好做了。這樣做的最終目的是:程序員可以用這種表達式解析html代碼,就像處理普通的字符串那樣的方便。
希望大家參與,多出主意,我會根據大家的反饋,完善這個語法,並做一個基於這個語法的實現。
參考:
關於正則表達式的基本介紹可以看這裡:
http://www.VeVb.com/htmldata/2006-03-16/1142469074.html
http://www.VeVb.com/htmldata/2006-03-16/1142468929.html
正則表達式最早是由數學家stephen kleene於1956年提出,他是在對自然語言的遞增研究成果的基礎上提出來的。具有完整語法的正則表達式使用在字符的格式匹配方面上,後來被應用到熔融信息技術領域。自從那時起,正則表達式經過幾個時期的發展,現在的標準已經被iso(國際標準組織)批准和被open group組織認定。
正則表達式並非一門專用語言,但它可用於在一個文件或字符裡查找和替代文本的一種標準。它具有兩種標準:基本的正則表達式(bre),擴展的正則表達式(ere)。 ere包括bre功能和另外其它的概念。
許多程序中都使用了正則表達式,包括xsh,egrep,sed,vi以及在unix平台下的程序。它們可以被很多語言採納,如html 和xml,這些採納通常只是整個標準的一個子集。