2026年4月26日 星期日

Macbook Neo 到手後身為微軟慣用者的適應調整

從 Dos 3.0 到現在,我的微軟使用年齡已經有40年(嚇到),期間除了因為大學圖書館只有Mac有中文而主動去使用以外,其他時候都因為不順手而避開蘋果電腦。

雖然看了許多網頁及影片說明,已經心裡有個底,但實際上手使用,多年使用形成肌肉記憶的諸多快速鍵組合瞬間都失效,視窗縮小放大關閉從右上角改成左上角,沒有刪除只有倒退鍵,還有反直覺的滑動方向,都是滿滿不習慣。

快速鍵最常用的複製貼上剪切倒退儲存等,原本在 Windows 系統按 Ctrl 的許多組合鍵,多數改按 Mac 的 Command 就可以達成,其他只能慢慢用到熟悉再記起來。這個 Command 鍵在微軟的鍵盤,對應的就是 Win 鍵,在Mac以遠端桌面或模擬器使用 Windows 時,經常用到。

缺少Del鍵的部分,只好改以 Fn + delete 或 Control + D,來刪除游標右側的字。在中文輸入法狀態下,按下 Shift + 空白鍵,可以快速切換「全形」與「半形」模式,按下 Option + Shift + B 打開標點符號視窗,也可以選取需要的全形符號。左上角叉叉按了以後,程式只是縮到 Dock 呈現下面加黑點待命狀態,要按 Command + Q 來完全關閉。

畢竟這台 Macbook 本來就是為了,不坐在螢幕滑鼠鍵盤前使用而購買的,因此好好的習慣了觸控板一陣子。在設定「觸控軌跡板」裡面的「點按」分頁,我稍微調快「軌跡速度」、開啟了「查詢和資料偵測器」和「點一下來選按」。「捲動與縮放」分頁中,取消了「自然捲動」,雖然把它想成在滑 iPad 或手機也行,但是有時還是很反直覺,而且接了滾輪滑鼠以後更是與習慣方向相反,因此必須關掉。在「更多手勢」頁中打開「App Exposé 」,如果開啓「三指拖移」(設定 / 輔助使用 / 指標控制 / 觸控式軌跡 / 使用…來拖移 / 拖移樣式),這頁的全螢幕程式切換與指揮中心動作都會變成四指滑動。

Finder 的操作也是有一點需要適應,檔案反白選取狀態下,按Enter竟然是改檔名,要開啟必須點二下或是按 Cmd + O,按空白鍵的話,圖片和PDF檔可以預覽,其他文件則顯示簡單資訊。在 Windows Explorer 裡按 Alt + Enter 是查看內容,這邊改成單項時按下 Command + I 、多項時按下 Command + Option + I ,開啟「取得資訊」視窗顯示詳細內容。我還會在螢幕上方選單列按「Finder、設定、進階」,打開「顯示...副檔名」。在螢幕上方選單列按「顯示方式」,選擇「顯示路徑列」、「顯示狀態列」,這樣才知道自己在資料夾哪裡稍微習慣一點。

在 Mac 裡切換程式是按 Command + Tab,其實這樣也好,在遠端桌面或模擬器使用 Windows 時才不會跟原本 Alt + Tab 重疊,這個時候沒有 Alt 鍵,是改按 option 鍵取代 Alt 鍵。切換程式不會顯示視窗畫面只有圖標,像舊版的 Windows,不過這個可以加裝「DockDoor」軟體解決。

Mac 沒有 PrtSc (Print Screen) 鍵,就算外接鍵盤有,按了也沒用,系統內建截圖快捷鍵主要透過 Command (⌘) + Shift + 數字鍵來組合操作:+ 3 直接擷取全螢幕、+ 4 等滑鼠變成十字準星後,拖曳擷取選取範圍、+ 4 後按下空白鍵滑鼠變成相機圖示,點選想要擷取的單一視窗、+ 5 開啟截圖工具列,可選擇截圖模式螢幕錄影或設定儲存位置。上述動作同時按住 Control 鍵,截圖會直接複製到剪貼簿,否則預設情況會儲存為 PNG 格式在桌面。

做了上述小調整,熟悉幾個常用快捷鍵以後,Mac 就變得比較順手了。我有按 Command + 空白鍵 叫出 Spotlight 對話框功能,直接搜尋開啟或計算都很方便,也開始使用 F5 的麥克風開啟聽寫功能做語音輸入,希望習慣以後操作更有效率。

購買我的第一台蘋果電腦 Apple Macbook Neo

多年來蘋果產品只比較認同iPad,但可能是因為一年半前,買了自己的第一支蘋果手機iPhone 16 Pro Max,也有可能對於去年初買了一台沒料到保固限定在中國,卻開機三次就壞掉的Acer筆電感到失望,今年以來,一直在考慮是否要購買MacBook Air。

市場上新款機器的風聲不斷,本來還在猶豫要不要購買前代的良品,沒想到三月初發表會,竟然出現了一台價格很有競爭力的新款筆電,跟市面上找得到的二手MacBook Air比較過以後,一方面覺得舊機市場價太高,一方面覺得自己大部分文書作業居多,所以就決定要來購買這款,跟我手機同樣A18芯片,價格卻便宜不少的MacBook Neo。

看了很多的評測報告跟影片,覺得記憶體8G已經很小,若選硬碟容量256G還不能指紋解鎖,可能會太辛苦,於是決定選擇512G Touch ID款。比較台灣和澳洲的蘋果官網價格,發現三月中下旬可能匯率22.5的關係,台灣的教育價TWD19,900比澳洲 AUD949便宜7%,但是官網購買學生專案需要UNiDAYS帳號,澳洲買沒要求比較簡單,而且可以使用折價禮物卡,60天內帶離開澳洲還可以退稅10%消費稅,所以決定澳洲購買。

近年來二大超市都以回饋點數20倍的方式,每隔一月輪番促銷Apple Gift Card,實質回饋比率大約10%,三月初Woolies的活動剛結束,所幸四月初Coles如預期的推出促銷,趕快去買了950元面額,結帳時見多識廣的老奶奶還提醒可以買到5張200面額,她不知道我不是拿來繳蘋果稅,而是剛要入坑而已。950-95-86=769,如果順利得到回饋和退稅等於以769澳幣取得,還比台灣便宜13%。

之前已經在店面感受過實機,覺得粉紅款有點像以前的蘋果出過的玫瑰金。這款很熱門大缺貨,4月2日買到禮物卡隔天,澳洲官網預計到貨時間,已經來到4月28號,沒想到選擇注音鍵盤,竟然可以比英文鍵盤提早兩天在26號到,那當然就選這樣囉~

過了一週4/10收到簡訊,說訂單已經出貨,我看貨物跨週末從廣東到香港,進雪梨通關送布村,4/14從印度小哥手上拿到真開心,沒有等太久過程順利開機也沒驚嚇,是一次愉快的購物體驗。


2026年4月7日 星期二

使用 Windows 指令輕鬆生成 Wi-Fi 網路報告

不知是否因為家中的連線裝置不知不覺超過100個,WiFi 連線有時候有點怪怪的。

最近發現,執行「netsh wlan show wlanreport」這個 Windows 指令,可以產生一份詳細的 HTML 報告,顯示最近的 Wi-Fi 活動。此報告預設涵蓋過去三天,包含會話歷史記錄、斷開連接原因、連線裝置詳細資訊以及其他路由器日誌通常不會顯示的網路資訊。這部分內容屬於 WLAN 自動配置層,大多數人甚至不知道它的存在。它包含了連接嘗試、身份驗證、驅動程式事件和電源狀態等信息,比我之前習慣去看的路由器資料要更簡單詳盡。

在我的W11電腦「系統命令字元」執行「netsh wlan show wlanreport」指令後,畫面顯示:
C:\Users\Tony>netsh wlan show wlanreport
正在產生報告 ...
正在查詢 WLAN 事件 ...
正在查詢 NCSI 事件 ...
正在查詢 NDIS 事件 ...
正在查詢 EAP 事件 ...
正在查詢 WCM 事件 ...
正在查詢核心事件 ...
正在查詢系統事件 ...
正在執行 ipconfig ...
正在執行 netsh wlan show all ...
正在查詢無線設定檔 ...
正在查詢系統和使用者憑證 ...
正在查詢使用者資訊 ...
正在查詢網路裝置 ...

報告已寫入: C:\ProgramData\Microsoft\Windows\WlanReport\wlan-report-latest.html
完成。

用瀏覽器開啟「C:\ProgramData\Microsoft\Windows\WlanReport\wlan-report-latest.html」後,就可以看到圖表顯示的網頁排版報告,對故障排除提供更多資訊。

2025年11月14日 星期五

近期最佳閱讀軟體 Readest

時間碎片化的時代,數位閱讀的比重越來越高,除了Kindle最常使用的裝置就是手機跟平板,前幾年用的,包含開放型電紙閱讀器都是安卓機,試用 「moon+ Reader 靜讀天下」後,付費購買使用好幾年,功能齊全能改排版、改字型、語音朗讀,後來連內容同步也補齊了,堪稱滿意。
然而在蘋果裝置一直沒有比較滿意的閱讀軟體,有使用「多多閱讀」可以改字型跟TTS,但可惜許多功能仍然欠缺。

前陣子開始接觸到「 Readest」這個開源、跨多平台軟體,介面優美功能完整,非常令人滿意,接受各種檔案格式、純文件自動分章節、標注、單字翻譯、全文翻譯、調整排版、直排閱讀、自訂字型、TTS語音閱讀、文件同步、進度同步,樣樣都有,一次到位!甚至包含KOReader伺服器進度同步,所以連我在Kindle讀的書也能同步閱讀進度了!還內建了「原俠正楷-T」等多個字型,多麼的有慧眼又睿智!(T版最穩我也是最常用)

現在我微軟安卓蘋果所有裝置都安裝,在閱讀器電腦平板手機之間任意切換,隨時都可以馬上銜接閱讀,非常方便,大家一定要用用看!


2025年11月12日 星期三

用Calibre把TXT轉成EPUB電子書 ,按章節分頁、自動產生目錄

批次修改TXT章節標題格式

首先我們可以先用Notepad++開啟TXT檔案稍微檢查一下,清除一些不必要的資訊或廣告,然後做初步的章節標題格式加註。
規則運算式搜尋及取代:
第(.*?)卷 → #第$1卷
第(.*?)章 → ##第$1章
# 是第一層標題
## 是第二層標題,以此類推


用Calibre把TXT轉EPUB

將TXT檔加入Calibre軟體後,使用「轉換書本」功能。

首先確認輸入格式為TXT,輸出格式為EPUB。
在「結構偵測」分頁中:
「偵測章節於 (XPath 表示式)」內容原本為英文判斷式:
//*[((name()='h1' or name()='h2') and re:test(., '\s*((chapter|book|section|part)\s+)|((prolog|prologue|epilogue)(\s+|$))', 'i')) or @class = 'chapter']

我們把它改成中文版:
//*[re:test(., "^\s*(簡介|內容簡介|序|推薦序|楔子|尾聲|後記|番外|[第卷][0123456789一二三四五六七八九十零〇百千兩]*[卷回部章節集])\s*([^課].*|)$", "i")]

下面「章節標記」選擇「pagebreak」把新章節分頁。

在「TXT輸入」分頁中,「規格化樣式」選擇「markdown」

按確定輸出後,選編輯書本、編輯目錄來檢查修改,存檔後大功告成。

如何在Notepad++使用RegEx來搜尋取代文數字空白和換行符號

Notepad++ 是台灣工程師侯今吾開發的純文字編輯器,自由、開源,而且非常高效好用,我個人三十幾年來使用過各式大小文字編輯軟體,最後只有這個軟體每台電腦都安裝,至今仍日常使用,而且作者很有人道關懷精神令人敬佩,好人好軟體還不用爆。

作業系統內建的記事本(Notepad),編輯文字時無法條件式尋找,也無法處理空白和換行符號,這個時候使用Notepad++就很適合。

搜尋換行符號:
換行符號CR:\r
換行符號LF:\n
Windows系統的格式:\r\n
Linux系統的格式:\r

搜尋「空白」:
注意全形空白 與半形空白 的差別
空白符號 :\s
tab換行的空白:\t
html的空白:&nbsp:

規則運算式(正規表達式)(Regular Expression)(RegEx)是什麼?
範例格式 [A-z]{2,4}
[]裡面代表要搜尋的目標範圍,根據預設,比對會區分大小寫。
  • [a-z] 只找小寫
  • [A-z] 找大寫+小寫
  • [0-9] 只找數字 (也可以只指定1-5)
  • [A-z0-9] 找同時包含大小寫與數字混合的字
{}裡面的數字代表要搜尋的數量長度範圍
  • {2,4} 找符合條件而且長度是2個字~4個字
  • {3,} 找符合條件且長度最少3個字或更多
  • {3} 找符合條件且長度剛好為3個字

規則運算式指定數字串搜尋實例
例如 [0-9]{10} ,可以搜尋10碼連續數字
手機號碼: 0912345678 聯絡人姓名
例如 [0-9]{4}-[0-9]{3}-[0-9]{3} ,可以搜尋包含-的格式化數字
手機號碼: 0912-345-678 聯絡人姓名

除了上述範圍範例,字元類別還有
  • By → 只找大寫B+小寫y
  • ^Bay → ^代表否定,這個例子找不是大寫B、小寫a、小寫y的其他字
  • a.e → .代表除了「\n」以外任何單一字元,類似DOS的?,此例找a開頭e結尾的三字字串
  • \d → 代表任何十進位數,與前述[0-9]類似,故上述手機號碼搜尋範例也可以寫成\d{4}-\d{3}-\d{3}
  • \D → 代表任何十進位數以外的字元及空格,與[^0-9]類似
  • \w → 代表任何英數字元,與前述[A-z0-9]類似
  • \W → 代表任何非英數字元,比如說空格、符號、標點
  • \s → 代表空格字元
  • \S → 代表非空格字元

除了上述範圍範例,數量類別還有
  • * → 找符合條件零次或多次
  • + → 找符合條件一次或多次
  • ? → 找符合條件零次或一次
  • *? → 找符合條件零次以上,但越少次越好
  • +?* → 找符合條件一次或多次,但越少次越好
  • ?? → 找符合條件零次或一次,但越少次越好

組合使用範例
  • \s* → 找出空格,不限數量
  • a.*c → "abcbc" 中的 "abcbc"
  • a.*?c → "abcbc" 中的 "abc"
  • be+ → "been" 中的 "bee"、"bent" 中的 "be"
  • be+? → "been" 中的 "be"、"bent" 中的 "be"
  • [0-9-[2468]]+ → 比對 0 到 9 中不包括 2、4、6 和 8 的任何出現一次或多次的字元。 換句話說,就是比對出現一次或多次的零或奇數



詳細用法還有很多,我去微軟的網站搬來了簡介參考如下:

規則運算式語言 - 快速參考

規則運算式是規則運算式引擎嘗試在輸入文字中比對的模式。 模式是由一個或多個字元常值、運算子或建構所組成。 如需簡介,請參閱 .NET 規則運算式

此快速參考中的每一節都列出您可以用於定義規則運算式的特定某類字元、運算子和建構。

我們也以兩種格式提供這項資訊,您可以下載並列印以方便參考:

逸出字元

正則表達式中的反斜杠字元 (\) 表示其後面的字元是特殊字元(如下表所示),或應該以字面方式解譯。 如需詳細資訊,請參閱逸出字元

逸出的字元描述模式比對
\a比對警示字元 \u0007。\a"Error!" + '\u0007' 中的 "\u0007"
\b在字元類別中,比對退格鍵 \u0008。[\b]{3,}"\b\b\b\b" 中的 "\b\b\b\b"
\t比對定位點 \u0009。(\w+)\t"item1\titem2\t" 中的 "item1\t""item2\t"
\r比對歸位字元 \u000D (\r 不等於新行字元 \n。)\r\n(\w+)"\r\nThese are\ntwo lines." 中的 "\r\nThese"
\v比對垂直定位點 \u000B。[\v]{2,}"\v\v\v" 中的 "\v\v\v"
\f比對換頁字元 \u000C。[\f]{2,}"\f\f\f" 中的 "\f\f\f"
\n比對新行字元 \u000A。\r\n(\w+)"\r\nThese are\ntwo lines." 中的 "\r\nThese"
\e比對逸出字元 \u001B。\e"\x001B" 中的 "\x001B"
\ nnn使用八進位表示法指定字元 (nnn 由兩位數或三位數組成)。\w\040\w"a bc d" 中的 "a b""c d"
\x nn使用十六進位表示指定字元 (nn 由剛好兩位數組成)。\w\x20\w"a bc d" 中的 "a b""c d"
\c X

\c x
比對 X 或 x所指定的 ASCII 控制字元,其中 X 或 x 是控制字元的字母。\cC"\x0003" 中的 "\x0003" (Ctrl-C)
\u nnnn使用十六進位表示比對 Unicode 字元 (剛好四位數,如 nnnn所表示)。\w\u0020\w"a bc d" 中的 "a b""c d"
\當後面加上的字元不是這張表和此主題其他表格中指出的逸出字元時,則比對該字元。 例如, \* 與 \x2A 相同,而 \. 與 \x2E 相同。 這可讓規則運算式引擎釐清語言項目 (例如 * 或 ?) 和字元常值 (以 \* 或 \? 表示)。\d+[\+-x\*]\d+"(2+2) * 3*9" 中的 "2+2" 和 "3*9"

字元類別

字元類別會比對一組字元中的任何一個字元。 字元類別包含下表列出的語言項目。 如需詳細資訊,請參閱字元類別

字元類別描述模式比對
[character_group ]比對character_group中的任何單一字元。 根據預設,比對會區分大小寫。[ae]"gray" 中的 "a"

"lane" 中的 "a""e"
[^character_group ]否定:比對不在 character_group 中的任何單一字元。 根據預設,character_group 中的字元會區分大小寫。[^aei]"reign" 中的 "r""g""n"
[第一 -最後 ]字元範圍:比對範圍中第一個到最後一個字元的任何單一字元。[A-Z]"AB123" 中的 "A""B"
.通配符:比對 以外的\n任何單一字元。

若要比對常值句號字元 (. 或 \u002E),您必須在它前面加上逸出字元 (\.)。
a.e"nave" 中的 "ave"

"water" 中的 "ate"
\p{名字 }比對 Unicode 一般類別或名稱指定之具名區塊中的任何單一字元。\p{Lu}

\p{IsCyrillic}
"City Lights" 中的 "C""L"

"ДЖem" 中的 "Д""Ж"
\P{名字 }比對不在 Unicode 一般類別或名稱指定之具名區塊中的任何單一字元。\P{Lu}

\P{IsCyrillic}
"City" 中的 "i""t""y"

"ДЖem" 中的 "e""m"
\w比對任何 單字字元\w"ID A1.3" 中的 "I""D""A""1""3"
\W比對任何 非單字字元\W"ID A1.3" 中的 " ""."
\s比對任何 空格符\w\s"ID A1.3" 中的 "D "
\S比對任何 非空格符\s\S"int __ctr" 中的 " _"
\d符合任何 十進位數\d"4 = IV" 中的 "4"
\D比對十進位數以外的任何字元。\D"4 = IV" 中的 " ""="" ""I""V"

錨點

錨點 (即原子零寬度判斷提示) 會造成根據字串中的目前位置來決定比對成功或失敗,但不會造成引擎在字串中前進或是取用字元。 下表列出的 metacharacter 是錨點。 如需詳細資訊,請參閱錨點

Assertion描述模式比對
^根據預設,比對必須在字串的開頭開始;在多行模式中,它必須在一行的開頭開始。^\d{3}"901-333-" 中的 "901"
$根據預設,比對必須發生在字串的結尾或字串結尾的 \n 之前;在多行模式中,它必須發生在一行的結尾之前,或一行結尾的 \n 之前。-\d{3}$"-901-333" 中的 "-333"
\A比對必須發生在字串開頭。\A\d{3}"901-333-" 中的 "901"
\Z比對必須發生在字串結尾,或發生在字串結尾的 \n 之前。-\d{3}\Z"-901-333" 中的 "-333"
\z比對必須發生在字串結尾。-\d{3}\z"-901-333" 中的 "-333"
\G比對必須發生在上一個比對結束的點,或者如果先前沒有相符專案,則發生在相符開始的字串中的位置。\G\(\d\)"(1)(3)(5)[7](9)" 中的 "(1)""(3)""(5)"
\b比對必須發生在 \w (英數) 和 \W (非英數) 字元之間的界限上。\b\w+\s\w+\b"them theme them them" 中的 "them theme""them them"
\B比對不可以發生在 \b 界限上。\Bend\w*\b"end sends endure lender" 中的 "ends""ender"

群組建構

分組建構會描寫規則運算式的子運算式,而且通常會擷取輸入字串的子字串。 分組建構包含下表列出的語言元素。 如需詳細資訊,請參閱群組建構

分組建構描述模式比對
( subexpression )擷取符合的子運算式,並指派以一為起始的序號給它。(\w)\1"deep" 中的 "ee"
(?<名稱 >subexpression )

(?'名稱 'subexpression )
將符合的子運算式擷取到具名群組中。(?<double>\w)\k<double>"deep" 中的 "ee"
(?<name1 -name2 >subexpression )

(?'name1 -name2 'subexpression )
定義對稱群組定義。 如需詳細資訊,請參閱 Grouping Constructs中的<對稱群組定義>一節。(((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$"3+2^((1-3)*(3-1))" 中的 "((1-3)*(3-1))"
(?: subexpression )定義非擷取型群組。Write(?:Line)?"Console.WriteLine()" 中的 "WriteLine"

"Console.Write(value)" 中的 "Write"
(?imnsx-imnsx: subexpression )套用或停用 子運算式內指定的選項。 如需詳細資訊,請參閱 Regular Expression OptionsA\d{2}(?i:\w+)\b"A12xl A12XL a12xl" 中的 "A12xl""A12XL"
(?= subexpression )零寬度右合樣 (Positive Lookahead) 判斷提示。\b\w+\b(?=.+and.+)"cats""dogs"
in
"cats, dogs and some mice."
(?! subexpression )零寬度右不合樣 (Negative Lookahead) 判斷提示。\b\w+\b(?!.+and.+)"and"、 、 "some""mice"
in
"cats, dogs and some mice."
(?<= subexpression )零寬度左合樣 (Positive Lookbehind) 判斷提示。\b\w+\b(?<=.+and.+)

———————————

\b\w+\b(?<=.+and.*)
"some""mice"
in
"cats, dogs and some mice."
————————————
"and"、 、 "some""mice"
in
"cats, dogs and some mice."
(?<! subexpression )零寬度左不合樣 (Negative Lookbehind) 判斷提示。\b\w+\b(?<!.+and.+)

———————————

\b\w+\b(?<!.+and.*)
"cats"、 、 "dogs""and"
in
"cats, dogs and some mice."
————————————
"cats""dogs"
in
"cats, dogs and some mice."
(?> subexpression )不可部分完成的群組。'(?>a|ab)c"ac" 在"ac"

中沒有任何專案"abc"

一目了然

當正則表達式引擎叫用 查詢表達式時,它會採用從目前位置到達原始字串的開頭(lookbehind)或 end (lookahead) 的子字元串,然後使用查詢模式在該子字元串上執行 Regex.IsMatch 。 然後,這個子表達式的結果成功取決於它是正判斷提示還是負面判斷提示。

Lookaround名稱函式
(?=check)正面外觀判斷提示字串中目前位置緊隨其後的是 「檢查」
(?<=check)正面Lookbehind判斷提示字串中目前位置前面緊接的專案為 "check"
(?!check)負面 Lookahead判斷提示字串中目前位置緊隨其後的不是 「檢查」
(?<!check)負面Lookbehind判斷提示字串中目前位置前面緊接的專案不是 「檢查」

比對之後, 即使模式的其餘部分因為相符而失敗,也不會重新評估不可部分完成的群組 。 當數量值發生在不可部分完成的群組或模式的其餘部分時,這可能會大幅改善效能。

Quantifiers

數量詞指定上一個項目 (可能是字元、群組或字元類別) 必須在輸入字串中出現多少次,才算符合。 數量詞包含下表列出的語言項目。 如需詳細資訊,請參閱數量詞

數量詞描述模式比對
*比對上一個項目零次或多次。a.*c"abcbc" 中的 "abcbc"
+比對上一個項目一次或多次。"be+""been" 中的 "bee""bent" 中的 "be"
?比對上一個項目零次或一次。"rai?""rain" 中的 "rai"
{ n }比對上一個項目剛好 n 次。",\d{3}""1,043.6" 中的 ",043""9,876,543,210" 中的 ",876"",543" 和 ",210"
{ n ,}比對上一個項目至少 n 次。"\d{2,}""166"、 、 "29""1930"
{ n , m }比對上一個項目至少 n 次,但不超過 m 次。"\d{3,5}""166""17668"

"193024" 中的 "19302"
*?比對上一個項目零次以上,但越少次越好。a.*?c"abcbc" 中的 "abc"
+?比對上一個項目一次或多次,但越少次越好。"be+?""been" 中的 "be""bent" 中的 "be"
??比對上一個項目零次或一次,但越少次越好。"rai??""rain" 中的 "ra"
{ n }?比對前一個項目剛好 n 次。",\d{3}?""1,043.6" 中的 ",043""9,876,543,210" 中的 ",876"",543" 和 ",210"
{ n ,}?比對前一個項目至少 n 次,但次數愈少愈好。"\d{2,}?""166"、 、 "29""1930"
{ n , m }?比對前一個項目 n 次到 m 次,但越少次越好。"\d{3,5}?""166""17668"

"193024" 中的 "193""024"

反向參考建構

反向參考可於後來在相同規則運算式中再識別先前符合的子運算式。 下表列出 .NET 中規則運算式所支援的反向參考建構。 如需詳細資訊,請參閱 Backreference Constructs

反向參考建構描述模式比對
\ number反向參考。 比對編號子運算式的值。(\w)\1"seek" 中的 "ee"
\k<名字 >命名的反向參考。 比對具名運算式的值。(?<char>\w)\k<char>"seek" 中的 "ee"

Alternation Constructs

替代建構會修改規則運算式來啟用二選一比對。 這些建構包含下表列出的語言元素。 如需詳細資訊,請參閱替代建構

交替建構描述模式比對
|比對由分隔號 (|) 字元所隔開的任何一個項目。th(e|is|at)"this is the day." 中的 "the""this"
(?( expression ) yes | no )

(?( expression ) yes )
如果 expression 所指定的規則運算式模式相符,則比對 yes ,否則比對選擇性的 no 部分。 expression 會解譯為零寬度判斷提示。

若要避免具名或編號擷取群組的模棱兩可,您可以選擇性地使用明確的判斷提示,如下所示:
(?( (?= expression ) ) yes | no )
(?(A)A\d{2}\b|\b\d{3}\b)"A10 C103 910" 中的 "A10""910"
(?( name ) yes | no )

(?( name ) yes )
如果 name (具名或編號擷取群組) 有相符項目,則比對 yes,否則比對選擇性的 no(?<quoted>")?(?(quoted).+?"|\S+\s)"Dogs.jpg \"Yiska playing.jpg\"" 中的 "Dogs.jpg ""\"Yiska playing.jpg\""

替代

替代是取代模式中支援的規則運算式語言元素。 如需詳細資訊,請參閱替代。 下表列出的 metacharacter 是原子零寬度判斷提示。

字元描述模式取代模式輸入字串結果字串
$ number替代群組 number所比對的子字串。\b(\w+)(\s)(\w+)\b$3$2$1"one two""two one"
${名字 }替代具名群組 name所比對的子字串。\b(?<word1>\w+)(\s)(?<word2>\w+)\b${word2} ${word1}"one two""two one"
$$替代常值 "$"。\b(\d+)\s?USD$$$1"103 USD""$103"
$&替代整個符合項目的複本。\$?\d*\.?\d+**$&**"$1.30""**$1.30**"
$`替代輸入字串中符合字串前面的所有文字。B+$`"AABBCC""AAAACC"
$'替代輸入字串中符合字串後面的所有文字。B+$'"AABBCC""AACCCC"
$+替代已擷取的最後一個群組。B+(C+)$+"AABBCCDD""AACCDD"
$_替代整個輸入字串。B+$_"AABBCC""AAAABBCCCC"

規則運算式選項

您可以指定選項,以控制規則運算式引擎如何解譯規則運算式模式。 這些選項中有許多可以指定為內嵌 (在規則運算式模式中) 或是一個或多個 RegexOptions 常數。 這個快速參考只列出內嵌選項。 如需內嵌和 RegexOptions 選項的詳細資訊,請參閱規則運算式選項

您可以透過兩種方式指定內嵌選項:

  • 使用 其他建構 (?imnsx-imnsx),其中選項或選項集前的減號 (-) 會關閉這些選項。 例如,(?i-mn) 會開啟不區分大小寫的比對 (i)、關閉多行模式 (m),以及關閉未命名的群組擷取 (n)。 選項會從定義該選項的位置開始套用至規則運算式模式並且保持生效,直到模式結尾或出現另一個建構反轉選項為止。
  • 使用群組建構(?imnsx-imnsx:subexpression),只針對指定的群組定義選項。

.NET 正則表示式引擎支援下列內嵌選項:

選項描述模式比對
i使用不區分大小寫的比對方式。\b(?i)a(?-i)a\w+\b"aardvark AAAuto aaaAuto Adam breakfast" 中的 "aardvark""aaaAuto"
m使用多行模式。 ^ 和 $ 會比對行的開頭與結尾,而不是字串的開始和結尾。如需範例,請參閱規則運算式選項中的<多行模式>一節。
n不擷取未命名的群組。如需範例,請參閱規則運算式選項中的<僅明確擷取>一節。
s使用單行模式。如需範例,請參閱規則運算式選項中的<單行模式>一節。
x忽略規則運算式模式中未逸出的空白字元。\b(?x) \d+ \s \w+"1 aardvark 2 cats IV centurions" 中的 "1 aardvark""2 cats"

其他建構

其他建構會修改規則運算式模式或提供其相關資訊。 下表列出 .NET 所支援的其他建構。 如需詳細資訊,請參閱其他建構

建構定義範例
(?imnsx-imnsx)在模式中間設定或停用選項,例如不區分大小寫。如需詳細資訊,請參閱規則運算式選項\bA(?i)b\w+\b 會比對 "ABA Able Act" 中的 "ABA""Able"
(?#評論 )內嵌註解。 註解會在第一個右括號結束。\bA(?#Matches words starting with A)\w+\b
# [至行尾]X 模式註解。 註解從未逸出的 # 開始,並延續到行尾。(?x)\bA\w+\b#Matches words starting with A

另請參閱