我正在尋找一個perl正則表達式,它將驗證只包含字母ACGT的字符串。例如,「AACGGGTTA」應該是有效的,而「AAYYGGTTA」應該是無效的,因爲第二個字符串的「YY」不是A,C,G,T字母之一。我有以下的代碼,但它證實了上述兩個字符串如何驗證一個字符串只有一定的字母由perl和正則表達式
if($userinput =~/[A|C|G|T]/i)
{
$validEntry = 1;
print "Valid\n";
}
感謝
我正在尋找一個perl正則表達式,它將驗證只包含字母ACGT的字符串。例如,「AACGGGTTA」應該是有效的,而「AAYYGGTTA」應該是無效的,因爲第二個字符串的「YY」不是A,C,G,T字母之一。我有以下的代碼,但它證實了上述兩個字符串如何驗證一個字符串只有一定的字母由perl和正則表達式
if($userinput =~/[A|C|G|T]/i)
{
$validEntry = 1;
print "Valid\n";
}
感謝
使用字符類,並確保你使用字符串的開始標記檢查整個字符串,\A
和結束的字符串標記,\z
。
你也應該使用*
或+
,表示你要多少字符匹配 - 「一個或多個」 *
手段「零個或多個」和+
手段
因此,正則表達式下面稱「起動與(不區分大小寫)串的端部之間,應該有以下字符僅一個或多個:A,C,G,T」
if($userinput =~ /\A[acgt]+\z/i)
{
$validEntry = 1;
print "Valid\n";
}
您的角色等級[A|C|G|T]
包含|
。 |
不代表角色類別的變化,它只代表自己。因此,字符類將包括|
字符,這不是你想要的。
您的圖案不固定。模式可以匹配任何包含一個或多個這些字符的字符串。相反,您需要錨定您的模式,以便只匹配從開始到結束僅包含這些字符的字符串。
$
可以匹配一個換行符。爲了避免這種情況,最後使用\z
來錨定。 \A
錨開頭(雖然你是否使用或^
在這種情況下,使用\A
提供了一個很好的對稱性不會有所作爲
所以,你檢查應該寫成:
if ($userinput =~ /\A [ACGT]+ \z/ix)
{
$validEntry = 1;
print "Valid\n";
}
使用字符計數TR運營商:
if($userinput !~ tr/ACGT//c)
{
$validEntry = 1;
print "Valid\n";
}
tr/characterset//
計數字符串中的字符如何在字符集;與/c
標誌,它計算多少在字符集中是而不是。如果使用!~
而不是=~
否定結果,那麼如果沒有字符不在字符集中,則爲true;如果字符不在字符集中,則爲true。
你真的想用/ i嗎,允許大寫還是小寫? – ysth 2013-03-20 04:09:42