我想为mach这个字符串值创建一个正则表达式:
100[some digits][some digits | some words | @][some digits | some words | @][some digits]
示例:
100[1234567855][1122bb33@@aaa][222@ffff@@@][1234567890]#
我使用了这个正则表达式:
(100)\[(\d+)\]\[\[(\d+)|(\w+)|(\@)\[(\d+)|(\w+)|(\@)\]\[(\d+)\]#$
但它正常工作。 任何想法?
感谢任何帮助...
答案 0 :(得分:1)
你的正则表达式在某些地方是错误的。
(100)\[(\d+)\]\[\[(\d+)|(\w+)|(\@)\[(\d+)|(\w+)|(\@)\]\[(\d+)\]#$
^^ ^^ ^
1 23 4
尝试:
(100)\[(\d+)\]\[((\d)|(\w)|(\@))+\]\[((\d)|(\w)|(\@))+\]\[(\d+)\]#$
答案 1 :(得分:1)
将\w
,\d
,@
放入字符类中,以匹配字词charcater或数字或@
符号。
@"^100\[(\d+)\]\[([\d@\w]+)\]\[([\d@\w]+)\]\[(\d+)\]#$"
由于[
是正则表达式中的特殊字符,因此您必须按顺序转义该字符以匹配文字[
符号。 [\d@\w]+
匹配一个或多个数字或字词或@
答案 2 :(得分:0)
^(100)\[([^\]]*)\]\[([^\]]*)\]\[([^\]]*)\]\[([^\]]*)\]#$
您可以改用它。参见演示。
https://regex101.com/r/vD5iH9/58
您可以通过在字符类中包含所有内容来提高正则表达式。
^(100)\[(\d+)\]\[([\da-zA-Z@]+)\]\[([\da-zA-Z@]+)\]\[(\d+)\]#$
您正在捕获(\d+)|(\w+)|(\@)
,而您的测试字符串中有@
两次或三次。
答案 3 :(得分:0)
试试这个 这将确保有一个100后跟你想要的表达式。
^:表达的开头。
[^ 100]:以100
开头^(.?$|[^100]\[([^\]]*)\]\[([^\]]*)\]\[([^\]]*)\]\[([^\]]*)\])#