過濾規則語法
[ 首頁 ] [ What's new ] [ Proxomitron中文網頁 ] [ 如何向垃圾郵件說[不] ] [ Web Bug 常見問答集中文版 ] [ 寫信給我 ]

 

過濾規則語法(Text matching language)是Proxomitron運作的主要關鍵。它讓你把搜尋複雜的HTML語言,留下需要的部分在變數裡,再把變數用在取代的部分。

如果你很熟悉DOS和UNIX的「*,?,[...]」(regular expressions),你會發覺Proxomitron和這些很像。

這套規則是針對HTML撰寫的。比如說,英文不分大小寫。不必去測試大小寫有沒有分。

底下是Proxomitron會用到的符號:

*

「*」會符合任何字串。如:「foo*bar」會找到「foobar」、「fooma babar」,甚至是「foo goat bat bison bar」。基本上「*」的意思是,「從*之前的字串開始找,直到你找到*之後的字串為止」。

?

「?」會符合任何「單一」字。如「?oat」會找到「boat」、「goat」甚至是「<oat」。

[abc...] 

中括號會符合任何在裡面列出的單一字。你可以用「-」設定範圍。[A-Z]會符合從A到Z的任何「單一」字,[0-9]會符合從0到9的單一號碼。如果中括號裡面的第一個字是^,那它就會找出「不在」括號裡的字。如:[^0-9abc]就會找到任何不是號碼,也不是a、不是b也不是c的字。

[#n-n]

搜尋特殊的數字範圍。這是用來搜尋HTML中的數字的。例如說,要搜尋介於100至150之間的數字就用「[#100-150]」。如果「*」號出現在第二個數字,譬如「[#40-*]」,那「*」就代表無限大,這個式子會找出大於40的數字。如果要找出小於40的數字呢?那就用「[#0-40]」。若要找特定的數字出來,那就把把第二個數字省略就可以啦:「[#40]」。在搜尋時,Proxomitron會把數字前的「0」和其他的符號忽略:tag="0040"。注意,目前這個指令只能搜尋正數,但是你可以在指令前加一個負號來搜尋負數:「-[#2-7]」,會找出介於-2到-7之間的數字。

" "

空格會找到任意個數(甚至是0個)的空格或TAB鍵。你可以在想要找兩個相鄰,但不一定有空格隔開的兩個字串之間使用空格。如:

<tag value>」會找到「<tag value>」、「<tag value>」,甚至是「<tagvalue>」。

\s

反斜線—S:就像空格一樣,但是他會找到至少一個空格。例如:「<tag\svalue>」會找到「<tag value>」、「<tag value>」,但不會找到「<tagvalue>」。

\w

反斜線—w:這個指令是用來找所有「非空格」的字串。他基本上是「\s」的相反,但是在某方面來說又很像「*」。和「*」的不同在於「\w」遇到空格或「>」(通常代表HTML標記的結尾)他就會停止搜尋。這個指令很適合用來找標記的值(tag value)或是URL時。(請參考「寫規則的小技巧」。) 

\t 

代表「tab定位鍵」。(這和WORD裡面一樣嘛。)

\r

代表「Return」鍵。

\n

代表「換行」符號。

\0-9

反斜線+0至9:代表變數。這個指令是Proxomitron的主要關鍵之一。他就像「*」,但是他把搜尋到的字串存在這些變數裡。這些變數可以放在「取代」欄中把原來的HTML字串放回去(如果WORD裡也有相同的功能的話…)!用這個指令可以只更改tag標記中特定的部分,而保持tag其他部分原封不動。比如說,在「<body...>」標籤中你只想要更改背景畫面,你可以:

Matching:<body \1 background="*" \2 >
Replace:  <body \1 background="mybackground.gif" \2>

如此一來,在<body>標籤中,<background>前後的其他部分都不會被更動,只有背景畫面被更改。

若要進行更複雜的搜尋,你可以用括號後緊接\#的方式。如:「(foo*bar)\2」,任何符合括號裡面的字串都會被存入「\2」這個變數中。

|

作用和「OR」一樣。例如:「foo|bar」會找到「foo」或「bar」。

&

作用和「AND」一樣。舉個例子好了,「*foo&*bar」就會找到「foo bar」或「bar foo」但是「foo foo」就不行。注意!在這個例子中的「*」,在使用「&」功能時總是要用「*」:沒有一個字是「foo」又同時是「bar」的^_^。「&」在當tag標籤內的設定沒有一定的出現順序時,如:

<img src="picture" height=60 width=200>
也可以寫作
<img width=200 height=60 src="picture">

但是用下面這條式子就搞定了:
<img (*src="picture" & *height=60 & *width=200)*>
 

( ... )

用括號來創造更複雜的式子。例如「foo(bar|bear|goat)」會找到「foobar」、「foobear」或「foogoat」。更複雜的巢狀結構「foo(bar|(black|brown|puce) bear|goat)」會找到「fooblackbear」或「foobargoat」等等。

就跟「[...]」一樣如果括號裡面第一個符號是「^」那就會找到「不相符」的字串。例:「(^foo|bar)」會找到任何不是「foo」或「bar」的字串。
請注意「^」不是你要找的字串,而是邏輯符號。

+

加號是要搜尋重複的字串。如:「a+」會找到「a」、「aa」或「aaaa」。你可以用括號形成更複雜的式子:

[abc]+」會找到這三個「不斷出現的」字母「ababccba」。
「([a-z]&[^n])+」會找到從A到Z(但是沒有N)不斷重複的字串。
「(foo)+」會找到「foo」、「foofoo」或「foofoofoo」等等。

\

反斜線會將原本在Proxomitron中有特殊意義的符號(「+」、「?」或「*」等等)「還原」成普通的字串。如果你要在HTML網頁中搜尋左括號,你就可以用「\(」;如果你要找反斜線的話,就用「\\」。

=

等號在Proxomitron中有特殊的「魔力」喔!他不只會找到「=」本身,他也會符合等號前後的空白,讓你在搜尋tag標籤時更省事。如「foo="bar"」會找到「foo= "bar"」或「foo = "bar"」

"

雙引號會找到單引號「'」或雙引號「"」(這兩個都會在HTML中出現)。如:「" * "」會找到


"oh happy mongoose"或'oh happy mengeese'


若你只想要找雙引號,你就要用前面提到的反斜線「\"

'

單引號簡單的說會找到「引號中的引號」,這在HTML中是很常見的。搞不懂?看下去就懂了…。
(請參照原文)
The single quote is smarter than your average quote: It attempts to match the appropriate ending quote for any quote previously matched by the double quote - even if there are other quotes in between!
如:


雙引號中的單引號
href=" javascript:window.open( ' bison.html ' ); "

單引號中的雙引號
href=' javascript:window.open( " bison.html " ); '


上面兩個式子都可以用
href=( " * ' )
只要用「"」代表第一層的引號,再用「'」代表裡面一層引號就可以了。但是有些限制要注意:第一個限制是,開始跟結尾的引號必須在同一「層」中(在巢狀結構的同一層中)。如:
" some text ' works... 
( " some text ' ) works too...
" ( some text | other text) ' even works... but
" ( some text ' ) won't work worth a darn
( " | ) some text ( ' | )sadly, won't work either

另一個限制是,
Another restriction is start and end quotes can't be nested in the same sub-expression - a matching clause of...

" something " something else ' end of something ' won't work

However, you can nest them using a different sub-expression, like so...

" something ( " something else ' ) end of something '

It's also worth noting that if no previous double quote was matched, the single quote just matches a normal single quote. Still it's safer to use \' to explicitly check for a single quote if you need to.

「取代」欄中的特殊符號


除了「搜尋」欄中的符號,「取代」欄中也有一些符號。首先,「\0」到「\9」會將搜尋欄中所儲存的字串放到取代欄中。還有:

\u

代表當時所在網頁的完全URL(full URL)。

\k

停止下載。在過濾HTTP header時很有用,瀏覽器會停止下載網頁的其他部分。

\h

包含URL中的主機(host)部分。

\p

包含URL中的路徑(path)部分。

\q

包含URL中的查詢(query)部分(任何在問號「?」後的字串)

\a

includes any anchor text from a URL (anything following a "#")

\d

包含以URL形式表示的proxomitron本機路徑(file://),常用來顯示替代圖片或資料的路徑。



需要一些範例嗎?請參考「寫規則的小技巧
 
Hosted by www.Geocities.ws

1