[英]Match Regular Expression to other regular expression in perl
我想查找給定的正則表達式是否是較大正則表達式的子集。 例如,給定一個較大的正則表達式((a *)(b(a *))),我想查找正則表達式是否類似於(aab。*)或(a。*)。 我正在開發一個程序,其中我需要找到可以從給定的正則表達式形成的給定長度的所有子字符串。
$count=0;
$len=0;
sub match{
my $c=$_[1];
my $str=$_[0];
my $reg=$_[2];
#if($str.".*"!~/^$reg$/){
# return;
#}
if($c==$len){
if($str=~/^reg$/){
$count++;
}
return;
}
my $t=$str.'a';
&match($t,$c+1,$reg);
my $t=$str.'b';
&match($str.'b',$c+1,$reg);
}
for(<>){
@arr=split(/\s/,$_);
$len=$arr[1];
&match('a',1,$arr[0]);
&match('b',1,$arr[0]);
print $count;
}
因此,我認為我將使用遞歸開始給定長度的字符串,並且當字符串大小達到所需長度時,我會將其與原始exp進行比較。 這對於較小的子字符串工作正常,但對於較大的子字符串會遇到堆棧溢出。 所以我在想,當生成字符串本身的一部分時,我將檢查表達式是否符合給定的reg exp。 但這沒有用。 對於上述給定的reg exp((a *)(b(a *))))如果我們將其與部分字符串(aa)進行比較,則它將失敗,因為reg exp不匹配。 因此,為了使其正常工作,我需要通過在每個部分子攪拌之后添加。*來比較兩個正則表達式。 我試圖在網上找到答案,但沒有成功。
我嘗試了以下代碼,但自然失敗了。 誰能建議其他方法。
if("a.*"=~/((a*)(b(a*)))/){
print match;
}
但是這里的第一部分被認為是實際的字符串。 您能幫我如何轉換代碼,以便我可以比較(a。*)作為正則表達式而不是字符串。
我認為一種方法是找到匹配字符串的長度(如果可以的話)。 例如,如果將(aab)匹配到(aac),則可以獲取匹配停止處的長度。
現在,比較匹配停止的位置(如果它等於您的字符串的長度,而不是其等效於str(。*)的正則表達式的位置)。 我讀到它可以用其他一些語言完成,但是我不確定perl。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.