[英]Match everything Between two Characters except when there is a Blank line
我試圖找到一個正則表達式模式,它匹配一個或兩個美元符號之間的所有內容, \\$.*\\$|\\${2}.*\\${2}
,除非有一個空行(它是兩個或一,不能是這樣的: \\$.*\\$\\$
)。 下面,我提供了我想要匹配的內容和我想要跳過的內容的示例。 匹配應包括/排除所有內容。
$$ \abc + ko$$
$*-ls$
這里單個美元符號前面有一個轉義字符,因此它不會破壞匹配。
$$
654a\$
$$
$123
a*/\
[]{}$
$$
asd
$$
$asdasd$$
再一次,我想匹配所有東西,如果它們在每一側都被一個 $ 或兩個 $ 綁定,除非中間有(有)空行。
到目前為止,我想出了如何匹配出現在一行中的那些,但我正在努力如何包含斷線並在整行為空時排除它們。
這是我所擁有的:
^\${2}.*[^\\$]\${2}$|^\$.*[^\\$]\$$
對於示例數據,您可以使用
(?<!\S)(\$\$?+)[^\r\n$]*(?:\$(?!\$)[^\r\n$]*)*(?:\r?\n(?![^\S\r\n]*$)[^\r\n$]*(?:\$(?!\$)[^\r\n$]*)*)*\1(?!\S)
解釋
(?<!\\S)
斷言左邊的空白邊界(\\$\\$?+)
捕獲第 1 組,匹配第二個所有格的 $ 或 $$(防止回溯)[^\\r\\n$]*(?:\\$(?!\\$)[^\\r\\n$]*)*
匹配除$
或換行符之外的任何字符,或者當不直接跟另一個$
時匹配$
(?:
非捕獲組
\\r?\\n(?![^\\S\\r\\n]*$)
匹配換行符,斷言不是只包含空格的行[^\\r\\n$]*(?:\\$(?!\\$)[^\\r\\n$]*)*
同上)*
關閉組並重復 0+ 次\\1
對第 1 組中捕獲的內容的反向引用(?!\\S)
斷言右側的空白邊界您可以使用
/^[^\S\r\n]{0,3}(\${1,2})(?:(?!\1|^$)[\s\S])+?\1[^\S\r\n]*$/gm
查看正則表達式演示
細節
^
- 一行的開始(因為m
使^
匹配行的起始位置)[^\\S\\r\\n]{0,3}
- 除 CR 和 LF 之外的任何空格出現零到三個(\\${1,2})
- 第 1 組持有一個或兩個$
字符(?:(?!\\1|^$)[\\s\\S])+?
- 任何字符 ( [\\s\\S]
),出現 1 次或多次,但盡可能少(由於惰性+?
量詞),其開始的序列與 Group 1 ( \\1
) 和 a 中捕獲的序列不同兩個換行符之間的位置 ( ^$
)\\1
- 與第 1 組相同的值( $
或$$
)[^\\S\\r\\n]*
- 除 CR 和 LF 之外的任何空格出現零次或多次$
- 行尾(因為m
使^
匹配行開始位置)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.