簡體   English   中英

正則表達式匹配不超過一定數量的特定字符的行?

[英]Regex match lines with no more than a certain number of specific characters?

到目前為止,這是我的正則表達式(假設 PHP 風格):

^(([^\\\\]+)\\\\([^\\\\]+)){1,4}$

還有我的測試數據:

U:\16. New Products\#Complete\Bottle Openers\20170210 St Patrick Bottle Openers\Small Lifestyles
U:\16. New Products\#Complete\Canvas
U:\16. New Products

目標是找到不超過 4 個斜線的所有行。 在這個例子中,我希望以匹配第二行和第三行,但是當我測試,在regex101似乎多條線路,匹配了,盡管有multiline集,並使用^$ 我究竟做錯了什么?

[^\\\\]模式是一個否定字符類,它匹配除\\字符之外的任何字符,因此,它可以匹配換行符。 要快速解決此問題,您可以將\\n (也許還有\\r )添加到否定字符類並使用

^(([^\\\n\r]+)\\([^\\\n\r]+)){1,4}$

請參閱正則表達式演示 [^\\\\\\n\\r]不能匹配 CR 和 LF 符號,並且可以匹配除\\ 、 LF 和 CR 字符之外的任何字符。

這項任務的更好的正則表達式是

^[^\\\n\r]*(?:\\[^\\\n\r]*){0,4}$

或者,將最后一個量化的部分設置為所有格以提高效率:

^[^\\\n\r]*(?:\\[^\\\n\r]*){0,4}+$

請參閱此正則表達式演示

細節

  • ^ - 字符串的開始
  • [^\\\\\\n\\r]* - 除\\ 、 LF 和 CR 之外的零個或多個字符
  • (?:\\\\[^\\\\\\n\\r]*){0,4} - 0 到 4 次
    • \\\\ - 一個\\字符
    • [^\\\\\\n\\r]* - 除\\ 、 LF 和 CR 之外的零個或多個字符
  • $ - 字符串的結尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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