2012-04-20 82 views
2

我有一个字符串,并希望得到它的一部分。假设我有一个字符串说“set aid ODU4-4-3”。我只想从中取出ODU。而字符串的模式不固定。 IT可能有些像ODU,ODU4,ODUX。我没有得到如何获取这个正则表达式在Perl/TCL

$aid = "ODU4-9-1"; 
$aid =~ /(\w)+\d*-\d-\d/; 
print " value is $1" 

输出

value is ODU4 

我需要的值是ODU只,而字符串模式可能会改变。它可能只是ODU-4-3或者可能会去ODU4-4-3。

my @allmatches = $aid =~ /([A-Z]{3}).*?\-\d\-\d/; 
+0

什么范围值可以ODU走? – Scroog1 2012-04-20 09:31:05

+0

模式类似于ODU-9-1,STS-9-1,STS3C-9-1,ODU4-9-1。问题是ODU可能是ODU或根据需要可能附加一些数字。 – Nitesh 2012-04-20 09:32:54

+0

Nitesh,如果你提到ODU的所有情况,这将是很好的。 – 2012-04-20 09:35:36

回答

2

的@ M42的回答返回所有匹配版本

$aid =~ /([A-Z]{3}).*?-\d-\d/; 

任何长度大于0和不区分大小写,使用

$aid =~ /([a-zA-Z]+).*?-\d-\d/; 
+0

ODU不是固定的。它可能会跟随任何数字或没有数字的字母组合。 – Nitesh 2012-04-20 09:34:40

+0

问题是一个字符串就像我描述的模式。我只想在第一种模式下只输入字母 – Nitesh 2012-04-20 09:35:46

+0

这不符合'STS3C-9-1' – Toto 2012-04-20 09:37:19

1

如何:

+0

这好多了。谢谢 – Nitesh 2012-04-20 09:38:26

+0

好得多 – Nitesh 2012-04-20 09:43:29

+0

@Nitesh:不客气。 – Toto 2012-04-20 09:46:18

1

如果你只想在odu字母,那么这应该做的伎俩

$aid =~ /([[:alpha:]]+)/; 
+0

太棒了。但它是如何工作的。这将获取字符串中的所有aplhabets,或者我们可以使用这个作为/([:alpha:]).*-\d-\d/ – Nitesh 2012-04-20 09:44:54

+0

工作是一个有趣的,如果我得到你的支持..... :) – Nitesh 2012-04-20 09:46:43

+0

检查** man grep **并搜索** alpha **以获取有关字符类的更多说明。如果你对ODU之后的细节不感兴趣,那么这应该做** /([[:alpha:]] +)*/** – tuxuday 2012-04-20 09:51:32

3

和Tcl的:

if {[regexp {^[[:alpha:]]+} $string letters]} { 
    puts $letters 
}