Возможны ли дополнительные группы, не захватывающие захват?Неустранимые группы не захватили?
Является ли следующее регулярное выражение:
(?:wo)?men
семантически эквивалентно следующему регулярному выражению?
(wo)?men
Возможны ли дополнительные группы, не захватывающие захват?Неустранимые группы не захватили?
Является ли следующее регулярное выражение:
(?:wo)?men
семантически эквивалентно следующему регулярному выражению?
(wo)?men
Ваш (?:wo)?men
(wo)?men
и семантически эквивалентны, но технически различаются, а именно, первый используется не захват, а другой группе захвата. Таким образом, вопрос , почему использовать не-захватить группы, когда у нас есть захват?
Неопасные группы иногда помогают.
Кроме того, это просто makes our matches cleaner:
Вы можете использовать не захватывая группу, чтобы сохранить организационные или группировки преимуществ, но без накладных захвата.
Это не кажется хорошей идея, чтобы повторно-фактор существующего регулярных выражений для преобразования захвата для не захвата групп, так как may ruin the code или требуют слишком много усилий.
Этот комментарий больше подходит для редактирования, вам не кажется? –
Просто обратите внимание, что ограничение 99 обратной ссылки не относится к Java regex engine. Количество групп захвата в Java хранится в * transient int captureGroupCount *, поэтому теоретически может быть много обратных ссылок, но число может быть ограничено ограничениями памяти. –
Я пытаюсь найти, сколько накладных расходов мы говорим и какое влияние это имеет на самом деле (Java и Javascript). Есть ли реальная польза в использовании групп, не связанных с захватом, с точки зрения производительности? – runlevel0
Я думаю, что это будет зависеть от того, где вы используете регулярное выражение. Стандартные строки регулярных выражений Java могут потребовать этого, хотя я уверен, что Perls будет считать его избыточным. – thecoshman
группы, не связанные с захватом, тяжелы на процессоре (так как для этого требуется дополнительная обработка), в то время как группы захвата тяжелы в памяти (так как они должны хранить много вещей). Но они семантически эквивалентны в некотором смысле, что они могут совпадать с одной и той же вещью, но по-другому. Вы можете думать, что это автомобили с разными двигателями, но оба они служат средством езды. –