簡體   English   中英

匹配兩個字符之間的所有內容,除非有空行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM