c 正则提取html,c – 正则表达式以获取HTML表格内容
確實沒有可能的正則表達式解決方案適用于任意數量的表數據,并將每個單元格放入單獨的后向引用中.這是因為通過反向引用,您需要為要創建的每個backref創建一個獨特的開放式窗口,并且您不知道自己有多少個單元格.
使用一種或另一種循環來提取數據沒有任何問題.例如,在最后一個,在Perl中,這將是這個,因為$tr已經包含你需要的行:
@td = ( $tr =~ m{
(.*?)}sg );現在$td [0]將包含第一個< td>,$td [1]將包含第二個,等等.如果你想要一個二維數組,你可以將它包裝在這樣的循環中以填充新的@cells變量:
our $table; # assume has full table in it
my @cells;
while(my($tr) =~ $table = m{
(.*?)}sg) {push @cells, [ $tr =~ m{
(.*?)}sg ];}
現在你可以進行二維尋址,允許$cells [0] [0]等.外部顯式循環一次處理一行,內部隱式循環拉出所有單元格.
這將適用于您展示的固定樣本數據.如果這對你來說足夠好,那就太好了.使用它并繼續前進.
什么可能是錯的?
但是,關于數據內容的模式實際上有很多假設,我不知道你知道的.首先,請注意我是如何使用/ s以便它不會卡在換行符上的.
但主要問題是最小匹配并不總是你想要的.至少,不是一般情況.有時它們并不像你想象的那么小,匹配的比你想要的多,有時它們只是不夠匹配.
例如,像< i>(.*?)< / i>的模式.如果字符串是:將獲得比你想要的更多:
foobarness
因為您最終會匹配字符串< i> foo< i> bar< / i>.
另一個常見問題(不包括不常見的問題)是像< tag.*?>這樣的模式.可能匹配得太少,比如
現在,如果您使用簡單的< img.*?>在那,你只會捕獲< img alt =“>,這當然是錯誤的.
我認為最后一個主要問題是你必須完全忽略解析中的某些事情.這個嵌入式注釋的最簡單的演示(也是< script>,< style>和CDATA`),因為你可以有類似的東西
some stuff
這會甩掉像< i>(.*?)< / i>這樣的東西.
當然,有很多方法可以解決這些問題.一旦你這樣做了,這真的是相當多的努力,你會發現你已經構建了一個真正的解析器,完全有很多輔助邏輯,而不僅僅是一個模式.
即便如此,您只處理格式良好的輸入字符串.錯誤恢復和輕柔失敗是一種完全不同的藝術.
總結
以上是生活随笔為你收集整理的c 正则提取html,c – 正则表达式以获取HTML表格内容的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android auto answer,
- 下一篇: 2017年html5行业报告,云适配发布