到目前为止这是我的正则表达式(假设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
并使用^
和{{ 1}}。我做错了什么?
答案 0 :(得分:1)
count += 1
模式是一个否定的字符类,它匹配任何char而不是[^\\]
char,因此,它可以匹配换行符。要快速解决问题,您可以将\
(可能还有\n
)添加到否定字符类并使用
\r
请参阅regex demo。 ^(([^\\\n\r]+)\\([^\\\n\r]+)){1,4}$
无法匹配CR和LF符号,并匹配除[^\\\n\r]
,LF和CR字符之外的任何字符。
此任务的更好的正则表达式是
\
或者,将最后一个量化的部分设置为占有性以提高效率:
^[^\\\n\r]*(?:\\[^\\\n\r]*){0,4}$
请参阅this regex demo。
<强>详情
^[^\\\n\r]*(?:\\[^\\\n\r]*){0,4}+$
- 字符串开头^
- 除[^\\\n\r]*
,LF和CR \
- 0到4次出现
(?:\\[^\\\n\r]*){0,4}
- \\
字符\
- 除[^\\\n\r]*
,LF和CR \
- 字符串结束。