如何使用Regex识别连续字符?

时间:2013-03-18 12:07:38

标签: regex

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

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

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

我可以使用RegEx吗?

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我认为你可以用正则表达式做到这一点。我假设您正在寻找的序列必须从A开始。下面Powershell中的示例有一个简化的正则表达式,只是为了速度和清晰度而使用前8个字符并且需要扩展:

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

尚未完全测试,但我认为没问题。