【发布时间】:2014-11-18 12:31:00
【问题描述】:
我有以下情况,我需要从以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,有两个用户名,则应考虑第一个用户名)
上述正则表达式的第二个问题是它没有显示“密码”值,它需要与用户名具有相同的条件。
如何改进上述正则表达式?
【问题讨论】:
-
一个
value可以有2个用户名和1个密码?您到底期望输出什么? -
@Jerry 我放这个是为了确保只检索到第一个用户名。
-
这是一条有用的信息!好的,我会在几秒钟内写一个答案
-
还有一个问题,对于
value3和value4,是否因为没有密码而需要匹配?用户名总是在密码之前吗? -
@Jerry :如果实际上只找到用户名或密码,它应该只返回一个。如果两者都找到,它会返回两者。如果没有找到,它应该返回 None