REGEX: каков индекс группы захвата при использовании с вертикальной чертой - PullRequest
0 голосов
/ 23 января 2019

Мое регулярное выражение похоже на (a=)true|(b=)true (это простая версия, а настоящая сложнее)

Предположим, что текст

a=true
b=true

Тогда я знаю, что a= или b= всегда \1 (или $1)

Но что, если текст похож на

a=true b=true

Я считаю, a= это \1, b= это \2.

Как сказал @PushpeshKumarRajwanshi, приведенное ниже утверждение неверно. Я вычеркнул их

Если текст

b=true a=true

Тогда b= равно \1, a= равно \2.

Меня беспокоит, если индекс не стабилен, зависит от порядка появления.

Как объяснить этот результат? Было бы здорово, если бы кто-нибудь смог перенаправить меня на официальный документ. Заранее спасибо.

UPDATE:

  • Если шаблон только (a=)true, (a=) всегда будет \1.
  • Если шаблон только (b=)true, (b=) всегда будет \1.
  • (На мой взгляд) узоры с обеих сторон вертикальной черты (символ трубы) параллельны.

Исходя из 3 приведенных выше утверждений, я ожидаю, что в паттерне (a=)true|(b=)true либо (a=), либо (b=) все равно будет \1 Так что я мог бы использовать один индекс для ссылки на них обоих, например, подстановку, s/(a=)true|(b=)true/\1false/g. Но дело не в том, что я ожидаю.

Если изменить шаблон на (a=|b=)true, то я всегда могу использовать \1 для ссылки на них.

Итак, мой вопрос, могу ли я использовать только один индекс для ссылки на группу захвата в шаблоне (a=)true|(b=)true? или я должен изменить шаблон на (a=|b=)true?

...