Пробелы в регулярных выражениях
Исходные данные в родительском узле могут иметь большое количество ненужных пробелов, что может привести к ошибке переполнения стека (stack overflow), если вы попробуете выполнить этот узел.
Такие правила опасны и могут привести к переполнению стека.
Чтобы игнорировать все пробелы в правиле, отметьте галочкой опцию Игнорировать пробелы.
Обычно данная опция очень удобна и полезна. Она позволяет писать такие правила, как:
Рассмотрим конкретный пример. Предположим, что у нас имеются текстовые данные из узла Замена терминов. Эти данные содержат большое количество пробелов. Нам нужно заменить термин "FordCompany". Опции Игнорировать пробелы и Учитывать регистр включены. Условия:
[^[:upper:]] находит любые элементы не верхнего регистра, в том числе пробелы. Если заменить \s+ одним пробелом и выполнить замену "Ford", ошибки не возникает.
Следовательно, можно преобразовать правило
(^|\s[^[:upper:]]+\s+)(?i:ford)(\s+[^[:upper:]])
в
(^|\s[^[:upper:]\s]+\s+)(?i:ford)(\s+[^[:upper:]\s])
Это означает, что [^[:upper:]]+ to [^[:upper:]\s]+ - находит все символы нижнего регистра и пробелы.
Чтобы избежать возникновения ошибки переполнения стека, мы также можем добавить узел Замена терминов до текущего узла и заменить \s+ одним пробелом.
Как следует из изложенного выше, PolyAnalyst может игнорировать символы управления (пробелы, абзацы, табуляция), которые используются в регулярных выражениях. Чтобы найти эти символы, нужно использовать одиночные символы и классы символов.
Однако это поведение по умолчанию всегда можно изменить, отключив опцию Игнорировать пробелы.