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