我有一个字符串,需要检查它是否有一个字符序列。例如。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
没有经过全面测试,但我认为没问题。