我有一个简单的问题,但我无法解决这个问题。
我的字符串格式为ID: dddd
,带有以下正则表达式:
/^ID: ([a-z0-9]*)$/
或如下:ID: 1234 Status: 232
,所以使用以下正则表达式:
/^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$/
现在我想创建一个可以处理这两者的正则表达式。我想出的第一件事是:
/^ID: ([a-z0-9]*)$|^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$/
匹配,但我正在研究条件正则表达式,并且认为某些事情应该是可行的(伪编码)
if the string contains /Status:/
/^ID: ([a-z0-9]*)$/
else
/^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$/
只是,我无法正确表达。我以为我应该使用/?=/
,但不知道如何。
像
/((?=Status)^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$|^ID: ([a-z0-9]*)$/
但这不起作用。
你能帮忙吗?
答案 0 :(得分:7)
您正在寻找^ID: (\d+)(?: Status: (\d+))?$
修改强>: 由于问题标记为Ruby,因此根据两者都值得一提 this question和this flavour-comparison,Ruby不执行条件正则表达式。
http://www.regular-expressions.info是这个主题的重要来源。
答案 1 :(得分:3)
您的前瞻需要.*
:(Rubular)
/(?=.*Status)^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$|^ID: ([a-z0-9]*)$/
但是,对于您的具体示例,您不需要前瞻。您只需使用?
量词:(Rubular)
/^ID: ([a-z0-9]*)(?: Status: ([a-z0-9]*))?$/
答案 2 :(得分:2)
有趣的是,根据this question,Ruby 1.8 / 1.9不支持条件正则表达式。
您(或任何回答者)是否以其他方式阅读?如果是这样,更新链接的问题可能会有所帮助,以便它不再提供不正确的信息。