Использование буквенно-цифровых символов внутри фигурных скобок в регулярном выражении [дубликат]

В принципе вы просто insertBefore ваш элемент, который вы нажали, перед его предыдущим дочерним элементом. Однако наличие пробелов в текстовых узлах делает это более раздражающим, чем должно быть в традиционных сценариях. API-интерфейс Element Traversal API сделает это проще, но пока он не будет более широко поддерживаться в браузерах, необходимы вспомогательные функции, например: .:3d3]

  & lt; div id = "  контейнер "& GT;  & Lt; & DIV GT; 1 & Lt; / дел & GT;  & Lt; & DIV GT; 2 & Lt; / дел & GT;  & Lt; & DIV GT; 3 & л; / дел & GT;  & Lt; / дел & GT;  & lt; script type = "text / javascript" & gt;  // Привязать событие к каждой строке div // var div = firstElementChild (document.getElementById ('container'));  while (div! == null) {div.onclick = swapWithPreviousElement;  div = nextElementSibling (div);  } // Переместить элемент перед его предыдущим элементом sibling // function swapWithPreviousElement () {var previous = previousElementSibling (this);  if (previous! == null) this.parentNode.insertBefore (это, предыдущий);  } // Мы использовали некоторые API-интерфейсы Element Traversal, но некоторые // браузеры еще не поддерживают их.  Предоставьте функции обертки // для совместимости.  // function previousElementSibling (element) {if ('previousElementSibling' в элементе) return element.previousElementSibling;  do element = element.previousSibling;  while (element! == null & amp; & amp; element.nodeType! == 1);  возвратный элемент;  } function nextElementSibling (element) {if ('nextElementSibling' в элементе) return element.nextElementSibling;  do element = element.nextSibling;  while (element! == null & amp; & amp; element.nodeType! == 1);  возвратный элемент;  } function firstElementChild (element) {if ('firstElementChild' в элементе) return element.firstElementChild;  var child = element.firstChild;  while (child! == null & amp; & amp; child.nodeType! == 1) child = child.nextSibling;  возвращение ребенка;  } & lt; / script & gt;   

17
задан Rafael Borja 16 December 2014 в 06:28
поделиться

2 ответа

Указание именованной группы захвата

Используйте следующее регулярное выражение с одной группой захвата в качестве примера ([Pp]attern).

Ниже приведены 4 примера того, как указать с именем захват группы для регулярного выражения выше:

(?<Name>[Pp]attern)
(?<group1>[Pp]attern)
(?<name>[Pp]attern)
(?<NAME>[Pp]attern)

Обратите внимание, что имя группы захвата должно строго соответствовать следующему шаблону:

[A-Za-z][A-Za-z0-9]*

Имя группы чувствительно к регистру, поэтому вы должны указать точное имя группы, когда вы обращаетесь к ним (см. ниже).

Backreference названная группа захвата в regex

В обратная ссылка содержимого, сопоставленного именованной группой захвата в регулярном выражении (соответствует 4 приведенным выше примерам):

\k<Name>
\k<group1>
\k<name>
\k<NAME>

Именованная группа захвата по-прежнему нумеруется, поэтому во всех 4 примерах он может быть обратным ссылкой с \1 в соответствии с нормальным.

Обратитесь к названной группе захвата в заменяющей строке

К относятся к группе захвата в заменяющей строке (соответствуют 4 приведенным выше примерам):

${Name}
${group1}
${name}
${NAME}

То же, что и abov е, во всех 4 примерах содержание группы захвата можно ссылаться на $1 в заменяющей строке.

Именованная группа захвата в режиме COMMENT

Использование (?<name>[Pp]attern) в качестве примера для этого раздела.

Реализация Oracle в режиме COMMENT (встроенный флаг (?x)) анализирует следующие примеры как идентичные регулярному выражению выше:

(?x)  (  ?<name>             [Pp] attern  )
(?x)  (  ?<  name  >         [Pp] attern  )
(?x)  (  ?<  n  a m    e  >  [Pp] attern  )

За исключением ?<, который нельзя отделять, он допускает произвольное расстояние даже между именем группы захвата.

То же имя для разных групп захвата?

Хотя в .NET, Perl и PCRE можно определить одно и то же имя для разных групп захвата, в настоящее время он не поддерживается в Java (Java 8). Вы не можете использовать одно и то же имя для разных групп захвата.

Именованные API-интерфейсы, связанные с группировкой

Новые методы в классе Matcher для поддержки получения захваченного текста по имени группы:

Соответствующий метод отсутствует в классе MatchResult с Java 8. Существует текущий запрос для JDK-8065554 для этой проблемы.

В настоящее время нет API для получения списка названных групп захвата в регулярном выражении. Мы должны перепрыгнуть через дополнительные обручи, чтобы получить его . Хотя для большинства целей это совершенно бесполезно, за исключением написания тестера регулярных выражений.

25
ответ дан Community 15 August 2018 в 15:06
поделиться

Новый синтаксис для именованной группы захвата - (?<name>X) для сопоставимой группы X, названной «имя». Следующий код захватывает регулярное выражение (\ w +) (любая группа буквенно-цифровых символов). Чтобы назвать эту группу захвата, вы должны добавить выражение? в круглых скобках перед захватом регулярного выражения.

Pattern compile = Pattern.compile("(?<teste>\\w+)");
Matcher matcher = compile.matcher("The first word is a match");
matcher.find();
String myNamedGroup= matcher.group("teste");
System.out.printf("This is yout named group: %s", myNamedGroup);

Этот код возвращает следующие выходные данные:

Это ваша именованная группа:

3
ответ дан codewing 15 August 2018 в 15:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: