Я работал над методом, который принимает регулярное выражение и строку для проверки этого выражения.
public bool match_case_insensitive(str regexp, str toMatch)
{
bool match = /<regexp>/i := toMatch;
if(match) println(toMatch);
return match;
}
Предположим следующее регулярное выражение: (.*[e]){2}
, которое соответствует любой строке как минимум с двумяЭ.Предположим, что следующая строка проверяется: merely
Вызов match_case_insensitive("(.*[e]){2}", "merely")
вернет false
.
Оценка выражения в терминале приведет к истине: /(.*[e]){2}/ := "merely"
возвращает bool:true
и то же самое для /(.*[e]){2}/i := "merely"
, если регистр не учитывается.
Я бы ожидал /<regexp>/i
вмою функцию оценивать до /(.*[e]){2}/i
, но это, по-видимому, неверно.Какая разница между выполнением необработанного сравнения в терминале и использованием этого метода?Я думаю, что Rascal не поддерживает захват групп, так как я не смог найти его в документации.Другая причина, по которой я могу придумать, заключается в том, что Rascal экранирует все строковые символы, и поэтому строка никогда не может содержать регулярное выражение, содержащее метасимволы.