我有一个字符串,并且需要检查它是否有一个字符序列。例如。 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