正則表達式在 HTML/XML/標記語言解析中應用廣泛,但需注意正則不適合解析任意嵌套結構 (如任意深度嵌套標籤),複雜場景請使用專業解析器 (Jsoup, DOM, SAX)。以下為常見場景實用模式整理。
| 場景 | 正則模式 | 匹配示例 | 說明 |
|---|---|---|---|
| 匹配成對標籤 (含內容) | <(\S*?)[^>]*>.*?</\1> | <html>hello</html>, <a>abcd</a> | 反向引用 \1 確保首尾標籤一致,非貪婪 .*? 匹配內容 |
| 匹配自閉合標籤 | <.*? /\> | <br/>, <img src="x"/> | 以 /> 結尾 |
| 綜合匹配 (成對 + 自閉合) | <(\S*?)[^>]*>.*?</\1>|<.*? /\> | 上述兩類均匹配 | 或運算組合 |
| 場景 | 正則模式 | 匹配示例 |
|---|---|---|
| 提取 href 鏈接 | href=["'](https?://|/|\./)?\w+(\.\w+)*(/\w+(\.\w+)?)*(/?|\?\w*=\w*(&\w*=\w*)*)?["'] | href="https://example.com/path?k=v" |
| 提取 src 圖片路徑 (jpg/png/gif/bmp) | src[^>]*[^/]\.(?:jpg|bmp|gif|png)(?:["']|$) | src="../img.jpg", src='https://cdn.com/x.png' |
| 匹配標準屬性 key="value" 或 key='value' | \w+\s*=\s*(["'])(.*?)\1 | class="container", id='main' |
| 匹配 BBCode 標籤 [tag attr="val"]content[/tag] | \[(\w+)\s*((\w+)=(['"]?)([^\]'"]*)\4)*\](.*?)\[/\1\] | [url="https://x.com"]Link[/url] |
| 場景 | 正則模式 | 說明 |
|---|---|---|
| HTML 註釾 | <!--.*?--> (單行) / (?s)<!--.*?--> (跨行) | (?s) 讓 . 匹配換行符 |
| 多行註釋 (C/Java 風格) | /\*[\d\D]*?\*/ | [\d\D] 匹配任意字符含換行 |
| 雙引號字符串 (支援轉義) | "([^"\\]|\\.)*" | 匹配 "text \"quote\" end" |
| 版權符號 © | \xA9 或 © | Unicode/實體編碼 |
| JavaScript 事件屬性 (onXXX) | (?i:on(blur|change|click|dblclick|focus|keypress|keydown|keyup|load|unload|mousedown|mouseup|mousemove|mouseover|mouseout|reset|select|submit)) | 忽略大小寫匹配 onClick 等 |
| 驗證目標 | 正則模式 | 說明 |
|---|---|---|
| 純英文字母 (大小寫) | ^[A-Za-z]+$ | 至少一位 |
| 純大寫字母 | ^[A-Z]+$ | |
| 純小寫字母 | ^[a-z]+$ | |
| 字母數字組合 | ^[A-Za-z0-9]+$ | |
| 字母數字下劃線 (\\w) | ^\w+$ | 等價 [A-Za-z0-9_]+ |
| 固定長度 (如 3 位) | ^.{3}$ | 任意字符 |
| 拒絕特殊字符 (<>`~!/@#$%^&*()_+={}|[]\\:";'<>?,./) | ^[^<>`~!/@#$%^&*()_+={}|[\]\\:";'<>?,./]+$ | 負向字符類 |
.* 匹配盡可能多,.*? 匹配盡可能少。HTML 跨標籤匹配必須用非貪婪。\b (單詞邊界)、^$ (行首尾)、(?=...) (正向預查)、(?!...) (負向預查) 精確定位。(?i) 忽略大小寫,(?s) 單行模式 (. 匹配 \n),(?m) 多行模式 (^$ 匹配行首尾)。(a+)+、過度回溯模式。長文本優先用 String.indexOf 定位大致區域再正則提取。黃金法則:正則表達式威力強大但「寫時只讀,改時淚流」。複雜模式務必添加註釋 (
(?x)模式支援空白註釋) 或拆分為多個簡單正則組合處理。