關(guān)于表格的正則表達(dá)式討論(表格)
更新時(shí)間:2006年08月07日 00:00:00 作者:
看過(guò)許多UBB代碼,包括JS,ASP,JSP的,一直沒發(fā)現(xiàn)表格的UBB,雖然可以直接用HTML模式實(shí)現(xiàn)相同表格功能,但對(duì)于某些開放的站點(diǎn)來(lái)說(shuō)開放HTML模式終究是不合適的,故一直想實(shí)現(xiàn)表格的UBB。
我的設(shè)想是在HTML編輯器(HTML,F(xiàn)RONTPAGE,DW)中作好表格,把<替換為[,>替換為],直接復(fù)制HTML并提交發(fā)布。
可惜經(jīng)過(guò)實(shí)踐,發(fā)現(xiàn)很難。因?yàn)楸砀竦腍TML標(biāo)記和其他元素的HTML標(biāo)記差別很明顯,主要原因TD,TR,特別是TABLE都能嵌套。其實(shí)我遇到的關(guān)鍵問題在于我不會(huì)寫 不包含某個(gè)單詞或語(yǔ)句(非單字符)的正則 ,譬如下面標(biāo)記
QUOTE:
[TABLE][TR] [TD]哈哈[TABLE][TR][TD]的[/TD][/TR][/TABLE][/TD][/TR][/TABLE]
你要匹配正確[TD]*[/TD]你就得必須保證*不包括[TABLE][TR][TD]等,注意不能用[^\[]*?啊,因?yàn)橛盟麩o(wú)法匹配正確的[/TD]的,所以問題在與我怎么保證這個(gè)*不包括[TABLE][TR][TD]呢,(我不會(huì)寫)。所以我:
退一步,先用\[td[^\]]*?\][^\[]*?\[table找到最后一個(gè)(其實(shí)最內(nèi)層的)表格,然后把最內(nèi)層的表格轉(zhuǎn)為HTML標(biāo)記,然后循環(huán)從頭開始再來(lái)一次,一直到所有標(biāo)記被替換。這個(gè)理論上是可以實(shí)現(xiàn)的。我用JSP正在實(shí)驗(yàn),需要時(shí)間,希望有興趣朋友用ASP,PHP實(shí)驗(yàn)一下。
因?yàn)槲壹庇?,所以我又退了一步,就是直接查找][TABLE]等標(biāo)記然后替換,有4個(gè)表達(dá)式,[TABLE][TR][TD]、[/TD][/TR][TR][TD]、[/TD][TD]、[/TD][/TR][TABLE] ,大家知道,UBB需要把/R/N替換成<BR>的,于是我用上面作出的正則查找并替換掉所有[TABLE]和[TR]和[TD]和[/TD]和[/TR]和[/TABLE]中的換行。其實(shí)這個(gè)表達(dá)式比下面表達(dá)式就多了這個(gè)替換換行功能,其不足之處是很明顯的,就是不能完善的剔除非配套的標(biāo)記,必須保證所有TABLE標(biāo)記是正確配套的(有TBODY的再改改就是了),否則亂套???nbsp;這一步我實(shí)踐還不錯(cuò)。
再退一步,其實(shí)沒法退了,就是直接單個(gè)查找替換[TABLE]等標(biāo)記,這是最苯的方法了,也是效果最不好的,因?yàn)榇蠹抑涝贖TML編輯器里的表格標(biāo)記中好多換行的,而UBB是為換行轉(zhuǎn)為<BR>的,所以這個(gè)方法實(shí)現(xiàn)了會(huì)發(fā)現(xiàn)好多空行的,而且這個(gè)方法和上面那一步一個(gè)共同缺點(diǎn)就是更不能剔除非配套標(biāo)記。
附我寫的退一步后的正則:(我用JSP)
QUOTE:
\\[(table)([^\\[]*?)\\][^\\[]*?\\[tr\\][^\\[]*?\\[td([^\\[]*)\\]|\\[\\/(td)\\][^\\[]*?\\[\\/tr\\][^\\[]*?\\[tr\\][^\\[]*?\\[td([^\\[]*)\\]|\\[\\/(td)\\][^\\[]*?\\[td([^\\[]*)\\]|\\[\\/(td)\\][^\\[]*?\\[\\/tr\\][^\\[]*?\\[\\/table\\]
我想如果是管理員發(fā)布信息什么的,能保證表格標(biāo)記的正確的話用這個(gè)還可以的。其實(shí)如果有人想搗亂的話,再嚴(yán)謹(jǐn)?shù)腢BB也不能防止的啊。
歡迎有興趣者來(lái)此討論,提出更好建議,打造最好最全的UBB。
我的設(shè)想是在HTML編輯器(HTML,F(xiàn)RONTPAGE,DW)中作好表格,把<替換為[,>替換為],直接復(fù)制HTML并提交發(fā)布。
可惜經(jīng)過(guò)實(shí)踐,發(fā)現(xiàn)很難。因?yàn)楸砀竦腍TML標(biāo)記和其他元素的HTML標(biāo)記差別很明顯,主要原因TD,TR,特別是TABLE都能嵌套。其實(shí)我遇到的關(guān)鍵問題在于我不會(huì)寫 不包含某個(gè)單詞或語(yǔ)句(非單字符)的正則 ,譬如下面標(biāo)記
QUOTE:
[TABLE][TR] [TD]哈哈[TABLE][TR][TD]的[/TD][/TR][/TABLE][/TD][/TR][/TABLE]
你要匹配正確[TD]*[/TD]你就得必須保證*不包括[TABLE][TR][TD]等,注意不能用[^\[]*?啊,因?yàn)橛盟麩o(wú)法匹配正確的[/TD]的,所以問題在與我怎么保證這個(gè)*不包括[TABLE][TR][TD]呢,(我不會(huì)寫)。所以我:
退一步,先用\[td[^\]]*?\][^\[]*?\[table找到最后一個(gè)(其實(shí)最內(nèi)層的)表格,然后把最內(nèi)層的表格轉(zhuǎn)為HTML標(biāo)記,然后循環(huán)從頭開始再來(lái)一次,一直到所有標(biāo)記被替換。這個(gè)理論上是可以實(shí)現(xiàn)的。我用JSP正在實(shí)驗(yàn),需要時(shí)間,希望有興趣朋友用ASP,PHP實(shí)驗(yàn)一下。
因?yàn)槲壹庇?,所以我又退了一步,就是直接查找][TABLE]等標(biāo)記然后替換,有4個(gè)表達(dá)式,[TABLE][TR][TD]、[/TD][/TR][TR][TD]、[/TD][TD]、[/TD][/TR][TABLE] ,大家知道,UBB需要把/R/N替換成<BR>的,于是我用上面作出的正則查找并替換掉所有[TABLE]和[TR]和[TD]和[/TD]和[/TR]和[/TABLE]中的換行。其實(shí)這個(gè)表達(dá)式比下面表達(dá)式就多了這個(gè)替換換行功能,其不足之處是很明顯的,就是不能完善的剔除非配套的標(biāo)記,必須保證所有TABLE標(biāo)記是正確配套的(有TBODY的再改改就是了),否則亂套???nbsp;這一步我實(shí)踐還不錯(cuò)。
再退一步,其實(shí)沒法退了,就是直接單個(gè)查找替換[TABLE]等標(biāo)記,這是最苯的方法了,也是效果最不好的,因?yàn)榇蠹抑涝贖TML編輯器里的表格標(biāo)記中好多換行的,而UBB是為換行轉(zhuǎn)為<BR>的,所以這個(gè)方法實(shí)現(xiàn)了會(huì)發(fā)現(xiàn)好多空行的,而且這個(gè)方法和上面那一步一個(gè)共同缺點(diǎn)就是更不能剔除非配套標(biāo)記。
附我寫的退一步后的正則:(我用JSP)
QUOTE:
\\[(table)([^\\[]*?)\\][^\\[]*?\\[tr\\][^\\[]*?\\[td([^\\[]*)\\]|\\[\\/(td)\\][^\\[]*?\\[\\/tr\\][^\\[]*?\\[tr\\][^\\[]*?\\[td([^\\[]*)\\]|\\[\\/(td)\\][^\\[]*?\\[td([^\\[]*)\\]|\\[\\/(td)\\][^\\[]*?\\[\\/tr\\][^\\[]*?\\[\\/table\\]
我想如果是管理員發(fā)布信息什么的,能保證表格標(biāo)記的正確的話用這個(gè)還可以的。其實(shí)如果有人想搗亂的話,再嚴(yán)謹(jǐn)?shù)腢BB也不能防止的啊。
歡迎有興趣者來(lái)此討論,提出更好建議,打造最好最全的UBB。
相關(guān)文章
正則表達(dá)式簡(jiǎn)介及在C++11中的簡(jiǎn)單使用教程
正則表達(dá)式(regular expression)是計(jì)算機(jī)科學(xué)中的一個(gè)概念,又稱規(guī)則表達(dá)式,通常簡(jiǎn)寫為regex、regexp、RE、regexps、regexes、regexen。接下來(lái)通過(guò)本文給大家介紹正則表達(dá)式簡(jiǎn)介及在C++11中的簡(jiǎn)單使用教程,一起通過(guò)本文學(xué)習(xí)吧2017-02-02java正則表達(dá)式獲取大括號(hào)小括號(hào)內(nèi)容并判斷數(shù)字和小數(shù)親測(cè)可用
這篇文章主要介紹了java正則表達(dá)式獲取大括號(hào)小括號(hào)內(nèi)容并判斷數(shù)字和小數(shù)親測(cè)可用,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06php password密碼驗(yàn)證正則表達(dá)式(8位長(zhǎng)度限制)
php password密碼驗(yàn)證正則表達(dá)式(8位長(zhǎng)度限制),需要的朋友可以參考下。2011-07-07正則表達(dá)式中test、exec、match的區(qū)別介紹及括號(hào)的用法
這篇文章主要介紹了正則表達(dá)式中test、exec、match的區(qū)別介紹及括號(hào)的用法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-09-09正則表達(dá)式Regular Expression (RegExp)詳解
正則表達(dá)式,又稱正規(guī)表示式、正規(guī)表示法、正規(guī)表達(dá)式、規(guī)則表達(dá)式、常規(guī)表示法(英語(yǔ):Regular Expression,在代碼中常簡(jiǎn)寫為regex、regexp或RE2015-11-11