[英].Net regex matching $ with the end of the string and not of line, even with multiline enabled
很明顯,您的文本包含除 LF 之外的換行符。 在 .NET 正則表達式中,點匹配除 LF 之外的任何字符(換行符, \\n
)。
默認情況下,
$
僅匹配輸入字符串的結尾。 如果您指定RegexOptions.Multiline選項,它將匹配換行符 (\\n
) 或輸入字符串的結尾。 但是,它不匹配回車/換行字符組合。 要成功匹配它們,請使用子表達式\\r?$
而不是$
。
所以,使用
@"^(#+).+?\r?$"
.+?\\r?$
將延遲匹配除 LF 之外的任何一個或多個字符,直到換行符之前的第一個 CR(這是可選的)。
或者只使用否定字符類:
@"^(#+)[^\r\n]+"
[^\\r\\n]+
將匹配 CR/LF 以外的一個或多個字符。
你所擁有的就是好的。 你唯一缺少的是.
即使使用多行選項,也不匹配換行符。 您可以通過兩種不同的方式解決此問題。
最簡單的方法是使用RegexOptions.Singleline標志,這會導致換行符被視為字符。 這樣, ^
仍然匹配字符串的開頭, $
匹配字符串的結尾,而.
匹配所有內容,包括換行符。
解決此問題的另一種方法(盡管我不會為您的用例推薦它)是修改您的正則表達式以明確允許換行。 為此,您只需替換任何.
with (?:.|\\n)
表示任意字符或換行符。 對於您的示例,您最終會得到^(#+)(?:.|\\n)+$
。 如果要確保首先有一個非換行符,請添加一個額外的點: ^(#+).(?:.|\\n)+$
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.