cht電腦資訊文書排版
adm Find login register

奇怪的 Openoffice Regular Expression

coolcd
joined: 2008-01-21
posted: 2601
promoted: 348
bookmarked: 95
1subject: 奇怪的 Openoffice Regular ExpressionPromote 0 Bookmark 12009-02-14quote  

Openoffice Writer 的 Search/Replace 支援 Regular Expression,但有許多奇異的行為:

  • \n 在搜尋欄代表 Shift+Enter 所輸入的手動換行符號,在取代欄卻代表 Enter 所輸入的換段符號
  • \xXXXX 在搜尋欄代表 unicode 中 U+XXXX 的字元,但在取代欄卻會被當成 "\xXXXX" 這樣的字串
  • back reference,在搜尋欄是 \1 \2 ...,但在取代欄要用 $1 $2 ... 
  • 除非你有勾「精確搜尋」,否則大小寫沒有差別,所以,預設 [a-z] 會 match [a-zA-Z]
  • [:class:] 的寫法與一般的正規表達式不太一樣,一般要用 [[:class:]+],但這在 Ooo 中無法正常作用
  • [:print:] 不會 match  ‘ ’ “ ” « »
  • [:space:] 只代表 space,不代表 tab

更多資訊可參考

OpenOffice.org 類型表式 (regular expression)
Documentation/How Tos/Regular Expressions in Writer

eliu

joined: 2007-08-09
posted: 11478
promoted: 617
bookmarked: 187
新竹, 台灣
2subject: Promote 0 Bookmark 02009-02-14quote  
寫 regular expression 真是痛苦。剛才又寫了一個 regular expression 把文章結尾的空白刪除。
edited: 1
本人已不在此站活動

joined: 2007-09-19
posted: 4946
promoted: 325
bookmarked: 206
歸隱山林
3subject: 奇怪的 Openoffice Regular ExpressionPromote 0 Bookmark 02009-02-14quote  

coolcd
Openoffice Writer 的 Search/Replace 支援 Regular Expression,但有許多奇異的行為:

  • \n 在搜尋欄代表 Shift+Enter 所輸入的手動換行符號,在取代欄卻代表 Enter 所輸入的換段符號
呃,這是哪一國的 re 呀?兩種不同的 re 並存會很不好用,就像用慣了 perl re,再來用 vim/sed re 就常常會搞錯。


eliu

joined: 2007-08-09
posted: 11478
promoted: 617
bookmarked: 187
新竹, 台灣
4subject: Promote 0 Bookmark 02009-02-14quote  
php 也有兩種 regular expression POSIX or PERL,PERL regular expression 比較多人用,功能也比較強。
edited: 1
本人已不在此站活動

joined: 2007-09-19
posted: 4946
promoted: 325
bookmarked: 206
歸隱山林
5subject: Promote 0 Bookmark 02009-02-14quote  

eliu
php 也有兩種 regular expression POSIX or PERL,PERL regular expression 比較多人用,功能也比較強。

這兩種比較容易區分。但問題是 ooo 在搜尋及取代有不同的 re rules,這樣就會常搞成一團亂了。


coolcd
joined: 2008-01-21
posted: 2601
promoted: 348
bookmarked: 95
6subject: 奇怪的 Openoffice Regular ExpressionPromote 0 Bookmark 02009-02-14quote  
coolcd

Openoffice Writer 的 Search/Replace 支援 Regular Expression,但有許多奇異的行為:

  • \n 在搜尋欄代表 Shift+Enter 所輸入的手動換行符號,在取代欄卻代表 Enter 所輸入的換段符號
  • \xXXXX 在搜尋欄代表 unicode 中 U+XXXX 的字元,但在取代欄卻會被當成 "\xXXXX" 這樣的字串
  • back reference,在搜尋欄是 \1 \2 ...,但在取代欄要用 $1 $2 ... 
  • 除非你有勾「精確搜尋」,否則大小寫沒有差別,所以,預設 [a-z] 會 match [a-zA-Z]
  • [:class:] 的寫法與一般的正規表達式不太一樣,一般要用 [[:class:]+],但這在 Ooo 中無法正常作用
  • [:print:] 不會 match  ‘ ’ “ ” « »
  • [:space:] 只代表 space,不代表 tab

再補一條:

  • $ 在搜尋欄代表段落符號,在取代欄代表 '$' 字元。

再分享一個經驗:

如果在搜尋欄輸入 $,在取代欄輸入 \n,按「全部取代」,結果會怎麼樣呢?首先,Openoffice 3.0  會問:「若要繼續此動作,必需關閉「還原」功能,你是否要關閉還原功能?」如果我乖乖地回答「是」,那我的 Openoffice 3.0 就會把 CPU 吃到 100%,如果回答「否」,就會出現「搜尋項目被六萬次取代。」

coolcd
joined: 2008-01-21
posted: 2601
promoted: 348
bookmarked: 95
7subject: Promote 0 Bookmark 02009-02-15quote  

如果在搜尋欄輸入 $ 搜尋,只可以找到 Enter 輸入的段落符號,但如果用 .*$ 搜尋,卻會找到用 Enter 分段或用 Shift-Enter 斷行的文字段落。

看起來 Ooo 的 regular expression 實在蠻複雜的,使用前最好多測試。

cht電腦資訊文書排版
adm Find login register
views:23304