我有一个字符串,可以包含无,一个或两个值。如果有两个值,它们用冒号分隔,如果第一个值应该为空,则第二个值(唯一值)将以冒号作为前缀。如何在一个字符串中匹配无,一个或两个值?
第一值可以由任何漂亮字符的字母数字和特殊字符,第二值唯一的字母数字字符的。因此冒号不是一个明显的分隔符。
我尝试了一些正则表达式,然而他们的工作罚款只有一个值,或两个值,而在第一冒号,但如果第一个是空的正则表达式返回整个字符串作为第一个值。
我的实际代码如下所示:
if ($string =~ m/^(.+)(\:(\w+)|)$/){
$value1 = $1 || '';
if ($3){$value2 = $3}
}
这一个适用于空字符串,只有第一个值,没有第一个值结肠两个值。
编辑:
字符串可能是:
Hello World!
(只有一个值:数值=的 'Hello World!')This is a test:123
(两个值:数值='这是一个test'value2 ='123'):Banana
(只有一个值:value2 ='香蕉')T3-76:
(只有一个值:VALUE1 = 'T3-76:')Book:Title:Mysql
(两个值:VALUE1 = '图书:名称' 值='MySQL的)
的主要问题是如何使包含冒号和冒号后面的一个文本的一个值字符串与第一个值中没有冒号的两个值字符串之间的差异。我应该假设,如果发生这种情况,它是一个两值字符串。
EDIT2
如果它可以更容易的代码可以修改不匹配一个空字符串。
有人有想法吗?
查看问题的编辑的版本 – Pit 2010-12-17 14:03:17
您如何知道“abc:def”是否是一个值(包含:)或两个值之间用?隔开的值? – ysth 2010-12-17 18:49:45
看到亚历山大的回答和我对它的评论 – Pit 2010-12-19 21:07:22