[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Query replace regex with 2 alternatives
From: |
Jambunathan K |
Subject: |
Re: Query replace regex with 2 alternatives |
Date: |
Sat, 08 Dec 2012 01:41:25 +0530 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) |
Dan Espen <despen@verizon.net> writes:
> Could use some help on query/replace/regex.
>
> I have an html file full of < and >.
> I want to replace only some of the pairs with "[" and "]".
>
> I figured out the match string:
>
> "\\(<\\|>\\)
>
> (typed as)
>
> "\(<\|>\)
>
> but when it comes to the replacement, I'm not clear on how to say,
> first match gets [ and second match gets ].
> I believe emacs can do it but I don't see it documented.
> I see references to \1 \2 but not in the replace string.
rx-to-string is the easiest way to build such an regexp.
C-h f rx
Do this
1. M-x ielm RET
2. Copy the below regexp to the prompt
(rx-to-string '(and (group-n 1 "<")
(group-n 2 (minimal-match
(zero-or-more anything)))
(group-n 3 ">")))
Here is a sample session.
,----
| ELISP> (rx-to-string '(and (group-n 1 "<")
| (group-n 2 (minimal-match
| (zero-or-more anything)))
| (group-n 3 ">")))
| "\\(?:\\(?1:<\\)\\(?2:\\(?:.\\|\n\\)*?\\)\\(?3:>\\)\\)"
`----
3. C-x b file.html
4. M-x reb-change-syntax RET read RET
5. M-x re-builder RET
6. Copy paste the above regexp in to *RE-Builder* buffer
7. You will see the various components highlighted in HTML buffer
8. M-x reb-change-syntax RET string RET
9. You will see the above regexp changed from read syntax to string
syntax. Something like. (Yes, the regexp is on two lines)
"\(?:\(?1:<\)\(?2:\(?:.\|
\)*?\)\(?3:>\)\)"
10. C-M-%
Copy the above regexp without surrounding double quotes RET
<\2> RET
You are done.
--