繁体   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