2010-01-28 41 views
1

我正在尋找一個快速庫簡單通配符邏輯/類使用像下面的表達式解析純文本:解析文本在Java/C/Objective-C的

文字爲:<b>Name:</b>John<br><i>Age</i>32<br>

模式是:{*}Name:</b>{%}<br>{*}Age</i>{%}<br>

它會找到我兩個值:John32。意圖是解析簡單的HTML網頁而不涉及重型工具。它不應該在內部使用字符串操作或正則表達式,但可能會通過char分析進行char。

+0

你想要Java或C或ObjC嗎?他們是完全不同的語言。 – kennytm 2010-01-28 20:35:45

+0

最終將Objective-C,但我可以從C/Java端口算法 – 2010-01-28 20:45:16

回答

0

由於您似乎在要求用戶指定所需的HTML內容,因此在此處使用正則表達式可能是正常的(爲什麼您對此感到厭惡?)。這不是HTML解析,而是簡單的文本匹配,這是正則表達式的設計目的。

下面是一個例子:

$match =~ s/{\*}/.*?/g; 
$match =~ s/{%}/(.*?)/g; 
$html =~ /$match/; 

這將讓你在拍攝羣體需要什麼。

+0

基本上它被用於小應用程序下載類似於HTML的(wap)文件並提取一些數字從文本結構不能保證是相同的,但它的某些部分可以被識別並視爲固定的,就像從手機銀行頁面獲取數據一樣,您可能需要查找「卡號: {%}
{ *} 餘額: {%}
'。這樣做與正則表達式我會猜想讓事情變得莫e複雜。 – 2010-01-28 20:57:51

+0

是什麼讓你覺得在應用程序的深處使用正則表達式會讓整個事情變得更加複雜?簡化文本匹配是正則表達式存在的全部原因。 – 2010-01-28 21:02:06

+0

你可能是對的,我現在就去試試。謝謝。 – 2010-01-28 21:14:22

0

正則表達式替換將工作。只要讓它像「John%32」一樣返回兩個值,然後分割響應以獲得兩個單獨的值。

0

這裏手動實現的逐字符解析確實沒有什麼好處,因爲這類問題已經被大量解決,並且已經解決了這些類型的問題。

  • 如果你正在處理一個非常標準化的數據集(即你上述模板的格式完全一樣在每一種情況,無失結束標記的可能性,被插入奇的地方,HTML等。 ),正則表達式是解析這類數據的完美工具。
  • 如果HTML無法保證是完美的,那麼最直接的解決方案是使用工具將HTML結構加載到DOM中,並在文檔樹中找到適當的元素。

開發一種逐個字符的方法可能最終將等同於手動實現上述兩個選項之一,這不是一個微不足道的實現。

+0

我不能使用DOM,因爲我想要一個純文本解析解決方案,以便我可以解析部分標記名稱,例如。我不想要正則表達式,因爲文本解析可能會很長。基本上我想要算法解析基於通配符的模式的文本,只是想'任何字符序列要忽略'和'任何字符序列存儲並返回給用戶'是{*}和{%}。 模式是用戶定義的,可以輕鬆解析文本數據並提取它的特定部分。 – 2010-01-28 20:53:04

+0

看來你所描述的本質上是一個帶有自定義語法的正則表達式版本。正則表達式庫相當成熟,應該能夠處理相當大的頁面大小。也許一個解決方案是採取您的自定義語法,並將其翻譯成標準的正則表達式語法? – 2010-01-28 20:59:58

+0

有趣的是,現在人們傾向於使用非常高級別的API,而不管任務如何:-)我想最終的方法將是20-30行代碼,但很難讓自己坐在紙和鉛筆上,做一些思考而不是使用谷歌搜索...:-( – 2010-01-28 21:01:48