郎朗坤
2023-05-25 17:17:35
我正在尋找可以支持以下測試用例的正則表達式:This shouldall beone match#this should not match1. nor this> nor thisthis should be a second match所以我可以將這兩個匹配項包裝在 <p> 標記中。但是,我被困在換行符上:兩個應該打破比賽,但一個換行符不能。這是我最接近的:(^[A-z].+)這正確地抓取了所有需要的文本,但形成了四個匹配而不是所需的兩個。關于正則表達式感謝您的時間。
3 回答

肥皂起泡泡
TA貢獻1829條經驗 獲得超6個贊
這不是您可以使用單個正則表達式完成的事情。雖然某些 Markdown 實現確實使用正則表達式作為解析 Markdown 的主要工具,但它們使用一系列表達式來這樣做(參見原始實現,markdown.pl
例如)。
例如,您可能有一個匹配標題的表達式、一個匹配列表項的表達式、一個匹配塊引號的表達式和一個匹配任何文本塊的表達式。這些表達式中的每一個都將依次針對輸入運行。但是,在運行最后一個表達式時,系列中的前一個表達式已經消耗了各種其他元素。因此,匹配段落的最終表達式不需要考慮標題、列表或塊引用的匹配。
事實上,如果您要從 中刪除標頭表達式markdown.pl
,那么所有標頭都將簡單地包裝在<p>
標簽中,而散列 ( #
) 仍包含在文本中。
我的意思是你需要實現一個完整的 Markdown 解析器。但是,已經存在許多實現。您可能最好使用一個已經存在的。事實上,大多數現代實現生成抽象語法樹 (AST) 而不是進行正則表達式替換(正如另一個答案中指出的那樣)。

Smart貓小萌
TA貢獻1911條經驗 獲得超7個贊
像 Markdown/Commonmark 這樣的語法不能 [easily, if at all] 用正則表達式解析。
使用適當的解析器來生成您可以操作的 AST。
添加回答
舉報
0/150
提交
取消