У меня есть две модели
$good = "/(Yo)| (Me)/";
$bad = "/(an)|(nd)/";
my $thestring: "You and Me";
Тогда я разрешаю строку, если один или несколько хороших шаблонов подходят и ни один из плохих:
if (($thestring =~ $good) && ($thestring !~ $bad))
{...
Строка "Ты и я" не должна быть разрешена, и она работает для этого примера.
НО, добавляя очень много (~ 5000 символов) шаблонов в $ good (например, (x1) | ... | (xn)), оператор if иногда разрешает эту строку.
Я не понимаю, почему? Есть ли какие-то ограничения?
Edit:
В оригинальной версии я пытался определить имена:
При использовании шаблона "хари" строка принимается, а без нее строка не принимается. Нормально, увидев «и» шаблон должен быть запрещен ...
my $text_to_search ="Bettina und Frank"; #der zu pruefende Text ist jeweils ein Datensatz aus dem positiven datensatz
my $regexp_output_pos ="/(tr)|(ammi)|(hann)|(Per)|(ome)|(tel)|(ley)|(ro)|(Ya)|(ita)|(Zilv)|(Pat)|(Ale)|(llia)|(assi)|(Dell)|(ulee)|(Ur)|(ke)|(ansi)|(af)|(dh)|(leen)|(Nik)|(Anto)|(mun)|(Tild)|(vya)|(oko)|(mi)|(Emm)|(vel)|(nnon)|(olau)|(Yan)|(eld)|(land)|(tole)|(Len)|(ai)|(Sibe)|(na) /";#|(hari)/";
#my $regexp_output_neg ="/(und)|(01)|(at)|(20)/";
#my $regexp_output_pos ="/(ett)|(ran)/";
my $regexp_output_neg ="/(und)|(01)|(at)|(20)/";
if (($text_to_search =~ $regexp_output_pos) && ($text_to_search !~ $regexp_output_neg))
{
print "akzeptiert";
}
else
{
print "nicht akzeptiert"
}