Во-первых: я не силен с регулярным выражением. Теперь это на столе. Я работаю над созданием регулярного выражения, которое использует группы, и дополнительные компоненты. Проблема, которую я имею, заключается в том, что мне нужно сопоставить определенное число в двух разных областях и дать им одно и то же имя группы. Это не работает.Группирование регулярных выражений и необязательные совпадения
Так что конкретные детали. Я анализирую журнал сбора мусора из JVM. Две линии, о которых идет речь, представляют собой полный GC и обычный GC.
Я сломал их, чтобы сделать их читаемыми.
Полная линия:
229980.058: [Full GC 229980.058:
[CMS: 2796543K->2796543K(2796544K), **13.3050667** secs]
2983863K->2872464K(4067264K),
[CMS Perm : 325367K->325242K(1048576K)], 13.3054416 secs]
[Times: user=13.27 sys=0.03, real=13.31 secs]
Регулярная линия:
2.752: [GC 2.752:
[ParNew: 1143680K->4938K(1270720K), **0.0243534** secs]
1143686K->4945K(4067264K), 0.0245283 secs]
[Times: user=0.05 sys=0.02, real=0.03 secs]
Как вы можете видеть, Full GC имеет CMS/штатное поколение в качестве первой области поля. У второго нет таких, поскольку это всего лишь обычная коллекция.
Для того, чтобы их можно было захватить, исправьте, я сделал оба раздела «CMS:» и «ParNew:» дополнительно друг к другу. Тем не менее, я хочу вытащить время из каждого как одно имя группы. (Значения я ставлю ** вокруг)
Я использую это регулярное выражение:
\ d + \ d +:. [(Full \ s) GC \ S \ d + \ d +?. [(CMS: \ s (? < JVM_TenuredGenHeapUsedBeforeGC> \ d +) + K -> (? < JVM_TenuredHeapUsedAfterGC> \ d +) K (\ d + K), \ s (? < JVM_GCTimeTaken> \ d +. \ d +) \ ssecs)? (ParNew: \ s (? \ D +) + K -> (? < JVM_NewGenHeapUsedAfterGC> \ d +) K ((? < JVM_NewGenHeapSize> \ d +) K), \ s (? < JVM_GCTimeTaken> \ d +. \ D +) \ ssecs)?] .. [отредактировано для краткости]
Короче .. Можно ли использовать одно и то же имя группы для разных необязательных совпадений? Они никогда не будут на одной линии, поэтому я не знаю, почему я не могу это сделать.
Тестирование этого с помощью регулярного выражения также, похоже, терпит неудачу. Благодаря!
Упс, я бы подумал, что это Dot-Net. Извини за это. – sln
Отлично! это действительно полезно. Благодаря! – jgauthier
Редактированное сообщение для решения Java. – sln