2015-06-09 2 views
0

Пример: Я хочу найти и заменить следующиематч и заменить различное число групп

51h 04h 02h  
CAh    

и получим:

cmd 51h; addr 04h; data 02h; 
cmd CAh; 

Это будет соответствовать первой строке

^([0-9A-F]{2}h)\t([0-9A-F]{2}h)\t([0-9A-F]{2}h) 

и я могу заменить на

cmd $1; addr $2; data $3; 

Но, конечно, вторая строка не соответствовала бы. В любом случае, чтобы охватить обе строки одним регулярным выражением? Я использую регулярное выражение из возвышенного текста 2.

+0

Его не очень сложно сопоставить, однако логическая логика необходима на стороне замены, что-то вроде обратного вызова, или вы можете просто использовать 2 выражения , каждое повторное сканирование ввода. – sln

ответ

1

Вы можете использовать следующее:

^([0-9A-F]{2}h)\s+([0-9A-F]{2}h)\s+([0-9A-F]{2}h)\s+(\w+) 
               ↑↑↑↑↑↑↑↑ 

См DEMO

логика: Так как \s матчи горизонтального и вертикального пространства будет захватывать следующее слово группы в следующей строке

+0

Спасибо. Но это не то, что я хочу. Я хочу заменить первое совпадение на строку определенной строкой и (необязательный) второй матч с другой строкой. – Dong

+0

@ Не можете ли вы обновить свой вопрос на примере? –

Смежные вопросы