我有这种情况:
练习1:
Valid:
12345678|abcdefghij|aaaaaaaa
Invalid:
12345678|abcdefghijk|aaaaaaaaa
这意味着管道之间的最大长度为8.如何在正则表达式中生成?
我把这个
^(?:[^|]+{0,7}(?:\|[^|]+)?$
但它不起作用
答案 0 :(得分:3)
尝试以下模式:
^.{1,8}(?:\|.{1,8})*$
基本思路是匹配1到8个字符,然后是|
和另外1到8个字符,该术语重复零次或多次。使用您想要查看其工作原理的任何数据来探索演示。
示例数据:
123
12345678
abcdefghi (no match)
12345678|abcdefgh|aaaaaaaa
12345678|abcdefghijk|aaaaaaaaa (no match)
在这里演示:
答案 1 :(得分:1)
如果要匹配分隔数据,则应避免使用普通的无限制.
。您需要匹配|
之间的部分,因此您应该考虑[^|]
否定的字符类构造,该构造匹配除|
之外的任何字符。
由于您需要限制否定字符类的模式出现次数,因此使用限制量词{1,8}
来限制它,该限制量词^[^|]{1,8}(?:\|[^|]{1,8})*$
匹配量化子模式的1到8次连续出现。
使用
^
请参阅正则表达式演示。
<强>详情
[^|]{1,8}
- 字符串的开头|
- 除(?:\|[^|]{1,8})*
\|
- 0个或更多连续序列:
[^|]{1,8}
- 文字管道符号|
- 除$
[^|]
- 字符串结束。然后,(
可以根据要求进一步限制。如果您只需要验证包含ASCII字母,数字,)
,+
,,
,.
,/
,:
的字符串,?
,-
,空格和^[A-Za-z0-9()+,.\/:?\s-]{1,8}(?:\|[A-Za-z0-9()+,.\/:?\s-]{1,8})*$
,您需要使用
<parallel>methods</parallel>