我有一個字符串,並且需要檢查它是否有一個字符序列。例如。 ABCDE,或者abcd如何使用正則表達式來識別順序字符?
比方說,我需要有長度大於3
換句話說更大的序列標誌串,我需要標誌abcpa,但不abpqx
我可以使用RegEx執行此操作嗎?
謝謝
我有一個字符串,並且需要檢查它是否有一個字符序列。例如。 ABCDE,或者abcd如何使用正則表達式來識別順序字符?
比方說,我需要有長度大於3
換句話說更大的序列標誌串,我需要標誌abcpa,但不abpqx
我可以使用RegEx執行此操作嗎?
謝謝
該正則表達式匹配的序列與至少連續3個字符:
/(?:abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|uvw|vwx|wxy|xyz)/i
下面的Perl腳本檢查指定數量的連續字符序列:
#!/usr/bin/perl
use strict;
use warnings;
my ($len, $test) = @ARGV;
my $s = "abcdefghijklmnopqrstuvwxyz";
my $re = "";
for (0..length($s)-$len) {
$re .= substr($s, $_, $len)."|";
}
chop $re;
exit 1 unless ($test =~ m/(?:$re)/i);
腳本退出,錯誤代碼1如果找不到匹配,並且其他錯誤代碼爲0。
稱之爲perl script.pl <min length of sequence> <string to test>
。
例子:
% perl script.pl 5 aaaabbbbeeeeehijklllmnppp && echo "match" || echo "no match"
match
% perl script.pl 6 aaaabbbbeeeeehijklllmnppp && echo "match" || echo "no match"
no match
我認爲你可以用正則表達式來做到這一點。我已經假設你正在尋找的序列必須從A開始。下面的例子在Powershell中有一個簡化正則表達式,只是爲了速度和清晰度而使用前8個字符,並且需要擴展:
$re = "(?<=(?<=(?<=(?<=(?<=(?<=a)b?)c?)d?)e?)f?)g?"
"abcpa" -match $re
$matches # => "abc"
$matches[0].length # => 3
沒有完全測試,但我認爲它是確定的。
啊,但我已經在問題的評論中提到序列不需要以A開頭....無論如何,謝謝! :) – navinpai 2013-03-18 14:15:48
正則表達式是不是做這份工作的合適工具。 – Toto 2013-03-18 12:23:09
「序列」是什麼意思?任何連續的字符序列,如「klm」,「hij」,我推測? – 2013-03-18 12:23:46
請澄清問題。查找字符串的標準是什麼?你給出了3個例子,但它們之間沒有明顯的相關性。即使你提到的長度似乎並不適用,因爲你說你不想要「abpqx」。你在找什麼? – 2013-03-18 12:42:56