我遇到以下情况,其中我需要从以username=xxx;
和开头的字符串中获取用户名和密码password=yyy;
用户名或密码没有限制,只是;
应该为每个关键字定界,并且用户名始终后跟username=
,密码后始终跟password=
。
我试图构造以下内容,但是我设法只得到了部分想要的结果
set value "colour=blue;
age=25;
name=anthony;
username=firstuser;
username=hisuser;
password=test123"
set value2 "colour=blue;
age=25;
name=brothersofanthony;
username=seconduser;
password=test123;"
set value3 "username=user-3"
set value4 "username=user4"
regexp -nocase -- {\y(?:username=|password=)[a-z0-9]+} $value match match2
puts "value is $match and match2 is $match2"
regexp -nocase -- {\y(?:username=|password=)[a-z0-9]+} $value2 match match2
puts "value 2 is $match and match2 is $match2"
regexp -nocase -- {\y(?:username=|password=)[a-z0-9]+} $value3 match match2
puts "value 3 is $match and match2 is $match2"
regexp -nocase -- {\y(?:username=|password=)[a-z0-9]+} $value4 match match2
puts "value 4 is $match and match2 is $match2"
我正在尝试建立一个可以返回用户名和密码的正则表达式。使用上面的正则表达式,如果用户名[a-z0-9]
实际上具有的用户名也可以是不同的符号(除了;
它是分隔符),那么我只能设法获得带有正确结果的“用户名”
如果发现字符串中多次出现(例如对于value
,有两个用户名,则应考虑第一个用户名)
上面的regexp的第二个问题是它不显示“ Password”值,它需要与用户名具有相同的条件。
我如何才能改善上述正则表达式?
在这种情况下,您需要将匹配项分开,否则将无法区分ausername
或a password
。我建议使用一个正则表达式作为用户名,使用另一个正则表达式作为密码。接下来,更改regexp,使字符类[^;]+
代替,[a-z0-9]+
以匹配除以外的所有字符;
。
set value "colour=blue;
age=25;
name=anthony;
username=firstuser;
username=hisuser;
password=test123"
regexp -nocase -- {\yusername=([^;]+)} $value - username
regexp -nocase -- {\ypassword=([^;]+)} $value - password
puts $username
puts $password
# => firstuser
# => test123
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句