2

我有一个字符串,需要检查它是否有一个字符序列。例如。abcde 或 abcd

假设我需要标记长度大于 3 的字符串。

换句话说,我需要标记abcpa,而不是abpqx

我可以使用 RegEx 执行此操作吗?

谢谢

4

2 回答 2

1

此正则表达式匹配具有至少 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
于 2013-03-18T14:10:31.943 回答
0

我认为您可以使用正则表达式来做到这一点。我假设您要查找的序列必须从 A 开始。Powershell 中的以下示例有一个缩减的正则表达式,仅使用前 8 个字符来提高速度和清晰度,并且需要扩展:

$re = "(?<=(?<=(?<=(?<=(?<=(?<=a)b?)c?)d?)e?)f?)g?"
"abcpa" -match $re
$matches # => "abc"
$matches[0].length # => 3

没有经过全面测试,但我认为没问题。

于 2013-03-18T14:08:10.187 回答