我有一个字符串,需要检查它是否有一系列字符。例如。 abcde,或abcd
假设我需要标记长度大于3的字符串。
换句话说,我需要标记 abcpa ,而不是 abpqx
我可以使用RegEx吗?
由于
答案 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
尚未完全测试,但我认为没问题。