Hallo, ich muss eine sehr umfangreiche PDF-Datei nach HTML konvertieren. Unabhaengig vom verwendeten Programm sieht der HTML-Code allerdings graesslich aus und muss gruendlich entruempelt werden. tidy bringt in diesem Fall leider nichts. Mit dem vim komme ich aber nicht weiter :-( Ich moechte z.B. alles von "<p class=" bis zur ersten schliessenden spitzen Klammer ">" suchen und ersetzen. Mit "<p class=.*>" geht es jedenfalls nicht, weil das ggfs. mehrere ">" einschliesst. Aber wie waere es richtig? Beste Gruesse, Heinz. -- Reisefuehrer Bulgarien, Slowakei: http://www.erlebnis-osteuropa.de Reiseberichte Osteuropa: http://www.pahlke-online.de Barrierefreies Webdesign: http://www.Pahlke-KunstWebDesign.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Heinz! On Wed, 30 Jul 2008, Heinz W. Pahlke wrote:
Mit dem vim komme ich aber nicht weiter :-( Ich moechte z.B. alles von "<p class=" bis zur ersten schliessenden spitzen Klammer ">" suchen und ersetzen. Mit "<p class=.*>" geht es jedenfalls nicht, weil das ggfs. mehrere ">" einschliesst.
Aber wie waere es richtig?
:h non-greedy Mit freundlichen Grüßen Christian -- hundred-and-one symptoms of being an internet addict: 221. Your wife melts your keyboard in the oven. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Christian, On 30-Jul-2008 Christian Brabandt wrote:
:h non-greedy
Sorry, no help for non-greedy :-( Installiert ist Version 6.4. Beste Gruesse, Heinz. -- Reisefuehrer Bulgarien, Slowakei: http://www.erlebnis-osteuropa.de Reiseberichte Osteuropa: http://www.pahlke-online.de Barrierefreies Webdesign: http://www.Pahlke-KunstWebDesign.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Heinz! On Wed, 30 Jul 2008, Heinz W. Pahlke wrote:
Hallo Christian,
On 30-Jul-2008 Christian Brabandt wrote:
:h non-greedy
Sorry, no help for non-greedy :-(
Installiert ist Version 6.4.
,---- | *non-greedy* | If a "-" appears immediately after the "{", then a shortest match | first algorithm is used (see example below). In particular, "\{-}" is | the same as "*" but uses the shortest match first algorithm. BUT: A | match that starts earlier is preferred over a shorter match: "a\{-}b" | matches "aaab" in "xaaab". | | Example matches ~ | ab\{2,3}c "abbc" or "abbbc" | a\{5} "aaaaa" | ab\{2,}c "abbc", "abbbc", "abbbbc", etc. | ab\{,3}c "ac", "abc", "abbc" or "abbbc" | a[bc]\{3}d "abbbd", "abbcd", "acbcd", "acccd", etc. | a\(bc\)\{1,2}d "abcd" or "abcbcd" | a[bc]\{-}[cd] "abc" in "abcd" | a[bc]*[cd] "abcd" in "abcd" | | The } may optionally be preceded with a backslash: \{n,m\}. `---- Entweder kann dein vim kein non-greedy, weil es noch nicht dokumentiert ist, oder deine Doku ist kaputt. Seit Version 6.4 sind 2 neue Versionen rausgekommen¹, die viele neue Features enthalten, aber auch jede Menge Fehler korrigieren (nach Version 7 gab es > 200 Patches, nach Version 7.1 > 300 Patches). An Deiner Stelle würd ich auf jeden Fall updaten, selber kompilieren ist auch simpel, aber wahrscheinlich gibt es irgendwo bereits aktualisierte Pakete. ¹) und Version 7.2 steht vor der Tür. Mit freundlichen Grüßen Christian -- hundred-and-one symptoms of being an internet addict: 222. You send more than 20 personal e-mails a day. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mittwoch, 30. Juli 2008 20:44 schrieb Heinz W. Pahlke: snip
Sorry, no help for non-greedy :-( War neugierig und habs ebenfalls versucht: Version 7.0.235
Ergebnis: E149: Schade, keine Hilfe für non-greedy Wat nu? -- Mit freundlichen Grüßen Matthias Müller (Benutzer #439779 im Linux-Counter http://counter.li.org) PS: Bitte senden Sie als Antwort auf meine E-Mails reine Text-Nachrichten! Siehe auch: http://www.gnu.org/philosophy/no-word-attachments.de.html
Hi Matthias! On Wed, 30 Jul 2008, Matthias Müller wrote:
Am Mittwoch, 30. Juli 2008 20:44 schrieb Heinz W. Pahlke: snip
Sorry, no help for non-greedy :-( War neugierig und habs ebenfalls versucht: Version 7.0.235
Ergebnis: E149: Schade, keine Hilfe für non-greedy
Wat nu?
Probier es halt aus? Nimm den folgenden Text: <p class="bla"> Ein Absatz<p> noch ein Absatz Nun suche nach /<.\{-}> (mit :set hls kannst Du dir den Treffer optisch anzeigen) Nun schau ob nur der erste Tag markiert ist. Im Gegensatz dazu markiert /<p.*> alles bis zum zweiten <p> Tag. Das sollte aber in Vim 7 bereits funktionieren. Mit freundlichen Grüßen Christian -- Wenn an der See die Brecher fauchen, dann wirst du keinen Fächer brauchen. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Donnerstag, 31. Juli 2008 20:15 schrieb Christian Brabandt: snip
Nun schau ob nur der erste Tag markiert ist. Im Gegensatz dazu markiert /<p.*> alles bis zum zweiten <p> Tag. Das mit dem Suchen war mir schon klar, das funktioniert soweit auch. Was non-greedy ist, ist mir (eigentlich) auch klar. Ich meinte die Hilfe dazu, die bringt den Fehler. Mit welcher vim-Version arbeitest du? Oder ist das in einem Plugin/Makro/Zusatprogramm drin?
-- Mit freundlichen Grüßen Matthias Müller (Benutzer #439779 im Linux-Counter http://counter.li.org) PS: Bitte senden Sie als Antwort auf meine E-Mails reine Text-Nachrichten! Siehe auch: http://www.gnu.org/philosophy/no-word-attachments.de.html
Hi Matthias! On Fri, 01 Aug 2008, Matthias Müller wrote:
Das mit dem Suchen war mir schon klar, das funktioniert soweit auch. Was non-greedy ist, ist mir (eigentlich) auch klar. Ich meinte die Hilfe dazu, die bringt den Fehler. Mit welcher vim-Version arbeitest du? Oder ist das in einem Plugin/Makro/Zusatprogramm drin?
Sorry für die späte Antwort. Ich nutze aktuell die upstream Version Vim 7.2 und die Doku ist natürlich nicht in einem Zusatzpaket enthalten. Das ist ja einer der großen Vorteile von Vim, die umfassende Doku. Ich bin mir aber relativ sicher, dass das schon relativ lange in Vim enthalten ist. In pattern.txt steht auch nichts? Funktioniert denn :h /\{- ? Einen Absatz drunter steht dann auch eigentlich das Tag non-greedy und die Erklärung dazu. Mit freundlichen Grüßen Christian -- hundred-and-one symptoms of being an internet addict: 223. You set up a web-cam as your home's security system. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Sonntag, 17. August 2008 10:39 schrieb Christian Brabandt: snip
:h /\{-
jepp, das tutet. Auf die Idee, dass reguläre Ausdrücke Hilfetags sind, muss man aber auch erst mal kommen. 20 Jahre vi und etwa 5 Jahre vim, ich dachte dass mich nichts mehr überraschen kann mit diesem Editor. So kann man sich täuschen. -- Mit freundlichen Grüßen Matthias Müller (Benutzer #439779 im Linux-Counter http://counter.li.org) PS: Bitte senden Sie als Antwort auf meine E-Mails reine Text-Nachrichten! Siehe auch: http://www.gnu.org/philosophy/no-word-attachments.de.html
Hallo, Am Mit, 30 Jul 2008, Heinz W. Pahlke schrieb:
Hallo Christian,
On 30-Jul-2008 Christian Brabandt wrote:
:h non-greedy
Sorry, no help for non-greedy :-(
Versuch's mit '<p *class=.*?>'. Ansonsten: <p *class=[^>]*> Perl is bei sowas aber recht praktisch. Muster: perl -pi.orig -e 's/<p\s*class.*?>/<p>/' *.html Der "in-place-edit" Modus von perl kann nämlich auch direkt mehrere Dateien verwursten. Man kann das auch in ein Script gießen, wenn einem das lieber ist. perl -MO=Deparse -pi.orig -e 's/foo/bar/' liefert einem das Gerüst für das Script (wobei das '-e syntax OK' wegzulassen ist). Und man kann die Dateinamen auch per find . -name '*.html' -print0 | xargs -r -0 perl -pi.orig -e '...' verfüttern. HTH, -dnh -- no amount of Zen contemplation will ever make you at one with a 3c905B ethernet card. -- Alan Cox -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, mit viel Verspaetung die Fortsetzung. On 31-Jul-2008 David Haller wrote:
Versuch's mit '<p *class=.*?>'. Ansonsten: <p *class=[^>]*>
Das erste funktionierte nicht, wohl aber das zweite. Bloss das WIE wuerde mich jetzt noch interessieren. Warum kommt hier * ohne . zum Einsatz? Mit ^wird sonst der Zeilenanfang gekennzeichnet. Hier nehme ich an, dass damit das erste Auftreten von > gemeint ist. Aber warum dann noch *>?
Perl is bei sowas aber recht praktisch. Muster:
perl -pi.orig -e 's/<p\s*class.*?>/<p>/' *.html
Es waere bestimmt nicht verkehrt, sich mal mit Perl zu beschaeftigen, aber das Einsteigerbuch, das ich mir vor langem gekauft habe, steht und steht und verstaubt ... Zeit muesste man haben. Beste Gruesse, Heinz. -- Reisefuehrer Bulgarien, Slowakei: http://www.erlebnis-osteuropa.de Reiseberichte Osteuropa: http://www.pahlke-online.de Barrierefreies Webdesign: http://www.Pahlke-KunstWebDesign.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Heinz W. Pahlke wrote:
Hallo,
mit viel Verspaetung die Fortsetzung.
On 31-Jul-2008 David Haller wrote:
Versuch's mit '<p *class=.*?>'. Ansonsten: <p *class=[^>]*>
Das erste funktionierte nicht, wohl aber das zweite.
Bloss das WIE wuerde mich jetzt noch interessieren.
Warum kommt hier * ohne . zum Einsatz? Mit ^wird sonst der Zeilenanfang gekennzeichnet. Hier nehme ich an, dass damit das erste Auftreten von > gemeint ist. Aber warum dann noch *>?
Die beiden eckigen Klammern kennzeichnen eine Zeichenklasse. Hier stehen einzelne Zeichen. Innerhalb dieser Klasse hat das ^ eine besondere Bedeutung: es negiert den Ausdruck. Also wird alles AUSSER dem folgenden Zeichen als gültig betrachtet. [^>]* bedeutet also "eine Folge von Zeichen, mit Außnahme von >" Viel Vergnügen: http://www.regular-expressions.info/ Wenn du nicht regelmäßig mit REs zu tun hast, wirst du außer den häufig verwendeten Ausdrücken ohnehin nachsehen müssen. Bis man sich dort eingearbeitet hat, vergehen schon ein paar Flüche. -- Sandy Antworten bitte nur in die Mailingliste! PMs bitte an: news-reply2 (@) japantest (.) homelinux (.) com -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Fre, 08 Aug 2008, Heinz W. Pahlke schrieb:
On 31-Jul-2008 David Haller wrote:
Versuch's mit '<p *class=.*?>'. Ansonsten: <p *class=[^>]*>
Das erste funktionierte nicht, wohl aber das zweite.
Bloss das WIE wuerde mich jetzt noch interessieren.
Warum kommt hier * ohne . zum Einsatz? Mit ^wird sonst der Zeilenanfang gekennzeichnet. Hier nehme ich an, dass damit das erste Auftreten von > gemeint ist. Aber warum dann noch *>?
Sandy hat das wichtigste schon geschrieben... Der erste Ausdruck ist ein "non-greedy" Ausdruck á la perl, den vim anscheinend nicht versteht. Das angefügte ? nach dem * bedeutet, daß das kürzest-passende Match genommen werden soll. ==== perldoc perlre ==== If you want it to match the minimum number of times possible, follow the quantifier with a "?". Note that the meanings don't change, just the "greediness": *? Match 0 or more times +? Match 1 or more times ?? Match 0 or 1 time ==== Der zweite Ausdruck ist dann die Variante, wenn man keinen 'non-greedy-modifier' zur Verfügung hat. Es bedeutet: <p die Zeichenkette "<p" * beliebig viele Leerzeichen (eigentlich ein Fehler hier, das müßte entweder " +" oder " *" sein ;) class= die literale Zeichenkette [^>] eine negierte Zeichenklasse, hier nur aus einem Zeichen bestehend, und der Bedeutung: jedes Zeichen außer ">" * und diese beliebig oft, also beliebig oft alles außer ">".
und ein literales ">"
Kurz: das ganze Muster passt von <p bis zu _nächsten_ >. Alles relevante steht in 'man 7 regex', vim verwendet soweit ich weiß die "extended regular expressions" wie egrep. Man kann sich außer in Sonderfällen (v.a. in perl) eigentlich immer so wie oben demonstriert zeichenweise durch die Regex wühlen...
Perl is bei sowas aber recht praktisch. Muster:
perl -pi.orig -e 's/<p\s*class.*?>/<p>/' *.html
Es waere bestimmt nicht verkehrt, sich mal mit Perl zu beschaeftigen, aber das Einsteigerbuch, das ich mir vor langem gekauft habe, steht und steht und verstaubt ... Zeit muesste man haben.
Wie war das noch? "Wenn der 24-Stunden Tag nicht reicht nehmen wir eben noch die Nacht dazu..."? Naja, sich mit perl zu beschäftigen lohnt sich IMO :) HTH, -dnh -- Sorry, mit java kenne ich mich gar nicht aus, das ist mir einfach zu unportabel. -- Thorsten Kukuk in suse-linux -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi David! On Sat, 09 Aug 2008, David Haller wrote:
Kurz: das ganze Muster passt von <p bis zu _nächsten_ >. Alles relevante steht in 'man 7 regex', vim verwendet soweit ich weiß die "extended regular expressions" wie egrep.
Nein, Vim verwendet eine Syntax, die sich an Perl anlehnt. *seufz* Aber die sind (fast) so mächtig wie Perl's RE. :h pattern.txt beschreibt alles ziemlich umfassend, inklusive Beispiele. Ach ja, :h perl-patterns: ,---- | 9. Compare with Perl patterns *perl-patterns* | | Vim's regexes are most similar to Perl's, in terms of what you can do. The | difference between them is mostly just notation; here's a summary of where | they differ: | | Capability in Vimspeak in Perlspeak ~ | ---------------------------------------------------------------- | force case insensitivity \c (?i) | force case sensitivity \C (?-i) | backref-less grouping \%(atom\) (?:atom) | conservative quantifiers \{-n,m} *?, +?, ??, {}? | 0-width match atom\@= (?=atom) | 0-width non-match atom\@! (?!atom) | 0-width preceding match atom\@<= (?<=atom) | 0-width preceding non-match atom\@<! (?<!atom) | match without retry atom\@> (?>atom) | | Vim and Perl handle newline characters inside a string a bit differently: | | In Perl, ^ and $ only match at the very beginning and end of the text, | by default, but you can set the 'm' flag, which lets them match at | embedded newlines as well. You can also set the 's' flag, which causes | a . to match newlines as well. (Both these flags can be changed inside | a pattern using the same syntax used for the i flag above, BTW.) | | On the other hand, Vim's ^ and $ always match at embedded newlines, and | you get two separate atoms, \%^ and \%$, which only match at the very | start and end of the text, respectively. Vim solves the second problem | by giving you the \_ "modifier": put it in front of a . or a character | class, and they will match newlines as well. | | Finally, these constructs are unique to Perl: | - execution of arbitrary code in the regex: (?{perl code}) | - conditional expressions: (?(condition)true-expr|false-expr) | | ...and these are unique to Vim: | - changing the magic-ness of a pattern: \v \V \m \M | (very useful for avoiding backslashitis) | - sequence of optionally matching atoms: \%[atoms] | - \& (which is to \| what "and" is to "or"; it forces several branches | to match at one spot) | - matching lines/columns by number: \%5l \%5c \%5v | - setting the start and end of the match: \zs \ze `----
Naja, sich mit perl zu beschäftigen lohnt sich IMO :) +1
Mit freundlichen Grüßen Christian -- hundred-and-one symptoms of being an internet addict: 224. You set up your own Web page. You set up a Web page for each of your kids... and your pets. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Son, 17 Aug 2008, Christian Brabandt schrieb:
On Sat, 09 Aug 2008, David Haller wrote:
Kurz: das ganze Muster passt von <p bis zu _nächsten_ >. Alles relevante steht in 'man 7 regex', vim verwendet soweit ich weiß die "extended regular expressions" wie egrep.
Nein, Vim verwendet eine Syntax, die sich an Perl anlehnt. *seufz*
Aber die sind (fast) so mächtig wie Perl's RE. :h pattern.txt beschreibt alles ziemlich umfassend, inklusive Beispiele.
Ah. Bin halt emacser, keiner vimser ;)
Ach ja, :h perl-patterns: [..] | Finally, these constructs are unique to Perl: | - execution of arbitrary code in the regex: (?{perl code})
"(?{ code })" WARNING: This extended regular expression fea ture is considered highly experimental, and may be changed or deleted without notice.
| - conditional expressions: (?(condition)true-expr|false-expr)
"(?(condition)yes-pattern|no-pattern)" "(?(condition)yes-pattern)" WARNING: This extended regular expression fea ture is considered highly experimental, and may be changed or deleted without notice. Beides sollte man also eher vermeiden.
| ...and these are unique to Vim: | - changing the magic-ness of a pattern: \v \V \m \M | (very useful for avoiding backslashitis)
\E end case modification (think vi) \Q quote (disable) pattern metacharacters till \E
| - sequence of optionally matching atoms: \%[atoms]
Das kapiere ich nicht. Meinen die sowas wie (foo|bar baz)?
| - \& (which is to \| what "and" is to "or"; it forces several branches | to match at one spot)
Das kann ich auch nicht nachvollziehen. (foo\&bar) was soll das bringen?
| - matching lines/columns by number: \%5l \%5c \%5v
Das könnte praktisch sein, und das scheint's nicht in perl REs zu geben.
| - setting the start and end of the match: \zs \ze
Das versteh ich auch wieder nicht ;) -dnh -- Fi-fa-Fußballweltmeisterschaft hört sich genauso albern an wie Bi-Ba-Butzemann. Und: Ballacks Wade interessiert mich einen Schweinefurz. -- Claus Maier -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi David! On Sun, 17 Aug 2008, David Haller wrote:
Am Son, 17 Aug 2008, Christian Brabandt schrieb:
On Sat, 09 Aug 2008, David Haller wrote:
Kurz: das ganze Muster passt von <p bis zu _nächsten_ >. Alles relevante steht in 'man 7 regex', vim verwendet soweit ich weiß die "extended regular expressions" wie egrep.
Nein, Vim verwendet eine Syntax, die sich an Perl anlehnt. *seufz*
Aber die sind (fast) so mächtig wie Perl's RE. :h pattern.txt beschreibt alles ziemlich umfassend, inklusive Beispiele.
Ah. Bin halt emacser, keiner vimser ;)
Sakrileg, er hat Jehova gesagt ;)
Ach ja, :h perl-patterns: [..] | Finally, these constructs are unique to Perl: | - execution of arbitrary code in the regex: (?{perl code})
"(?{ code })" WARNING: This extended regular expression fea ture is considered highly experimental, and may be changed or deleted without notice.
| - conditional expressions: (?(condition)true-expr|false-expr)
"(?(condition)yes-pattern|no-pattern)" "(?(condition)yes-pattern)" WARNING: This extended regular expression fea ture is considered highly experimental, and may be changed or deleted without notice.
Beides sollte man also eher vermeiden.
Ach ja, ich erinnere mich. Wobei ich zumindest die conditional expressions ziemlich praktisch finde. Das mit dem Code hab ich noch nie gebraucht, weil das Flag /e ja existiert.
| ...and these are unique to Vim: | - changing the magic-ness of a pattern: \v \V \m \M | (very useful for avoiding backslashitis)
\E end case modification (think vi) \Q quote (disable) pattern metacharacters till \E
Ah, gut zu wissen (So gut kenne ich die Perl REs nicht. Da muß ich jedesmal nachschlagen, weil ich ständig mit Vim REs komme¹). Sollte man mal als Bugreport melden. Ich kann mir auch nie merken, ob ich \v oder \V brauche. Aber ich glaube \v macht ein Pattern für einen Perl User lesbarer.
| - sequence of optionally matching atoms: \%[atoms]
Das kapiere ich nicht. Meinen die sowas wie (foo|bar baz)?
Hm, :h /\%[] sagt folgendes: \%[] A sequence of optionally matched atoms. This always matches. It matches as much of the list of atoms it contains as possible. Thus it stops at the first atom that doesn't match. For example: /r\%[ead] matches "r", "re", "rea" or "read". The longest that matches is used. To match the Ex command "function", where "fu" is required and "nction" is optional, this would work: /\<fu\%[nction]\> The end-of-word atom "\>" is used to avoid matching "fu" in "full". It gets more complicated when the atoms are not ordinary characters. You don't often have to use it, but it is possible. Example: /\<r\%[[eo]ad]\> Matches the words "r", "re", "ro", "rea", "roa", "read" and "road". There can be no \(\), \%(\) or \z(\) items inside the [] and \%[] does not nest. {not available when compiled without the +syntax feature} Mir erschließt sich gerade der Sinn nicht. Wenn wir beim Beispiel road bleiben, dann funktioniert ja auch /\<r\(e\|o\)\?a\?d\?\> (vim, \< und \> heißt hier word boundary) Naja, es sieht simpler aus und man versteht es auch schneller, wenn man diese Syntax beherrscht.
| - \& (which is to \| what "and" is to "or"; it forces several branches | to match at one spot)
Das kann ich auch nicht nachvollziehen. (foo\&bar) was soll das bringen?
:h /\& 2. A branch is one or more concats, separated by "\&". It matches the last concat, but only if all the preceding concats also match at the same position. Examples: "foobeep\&..." matches "foo" in "foobeep". ".*Peter\&.*Bob" matches in a line containing both "Peter" and "Bob" Wozu man das braucht, weiß ich aber auch nicht.
| - matching lines/columns by number: \%5l \%5c \%5v
Das könnte praktisch sein, und das scheint's nicht in perl REs zu geben.
Für einen Editor auf jeden Fall ;)
| - setting the start and end of the match: \zs \ze
Das versteh ich auch wieder nicht ;)
Das ist ziemlich praktisch. Angenommen ich habe eine komplexes Pattern, von dem ich einen Teil ersetzen will, dann kann ich den Match mithilfe von \zs und \ze auf den relevanten Teil einschränken. Zum Beispiel ich habe in einem langen Text mehrmals die Zeile: foo bar baz John foobar Dann kann ich mit :%s/foo bar baz \zsJohn\ze foobar/Alex/g nur den Namen austauschen, ohne im Ersetzungsteil foo bar baz Alex foobar schreiben zu müssen. Oder im Vimsprech: :h /\zs \zs Matches at any position, and sets the start of the match there: The next char is the first char of the whole match. |/zero-width| Example: /^\s*\zsif matches an "if" at the start of a line, ignoring white space. Can be used multiple times, the last one encountered in a matching branch is used. Example: /\(.\{-}\zsFab\)\{3} Finds the third occurrence of "Fab". {not in Vi} {not available when compiled without the +syntax feature} */\ze* \ze Matches at any position, and sets the end of the match there: The previous char is the last char of the whole match. |/zero-width| Can be used multiple times, the last one encountered in a matching branch is used. Example: "end\ze\(if\|for\)" matches the "end" in "endif" and "endfor". {not in Vi} {not available when compiled without the +syntax feature} Ich bin durchaus ein Vim Poweruser, aber ich benötige selten diese Advanced Regular Expressions. Ich muß dann auch immer nachschlagen², wie das funktioniert. Wenn man eine Zeitlang auf der Vim Mailingliste mitliest, dann versteht man aber einiges besser. ¹)Erwähnte ich schon, dass die verschiedenen RE Dialekte ziemlich nerven? Ständig nehme ich die falschen und ich muß immer überlegen, ob das aktuelle Tool jetzt dieses Feature kennt oder nicht. ²)Wie gesagt, die Doku ist mit das Beste was es beim Vim gibt. Für Reguläre Ausdrücke empfiehlt es sich :h pattern.txt zu überfliegen oder mal im User Manual :h usr_27.txt nachzuschlagen. Mit freundlichen Grüßen Christian -- hundred-and-one symptoms of being an internet addict: 225. You sign up for free subscriptions for all the computer magazines -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mon, 18 Aug 2008, Christian Brabandt schrieb:
On Sun, 17 Aug 2008, David Haller wrote:
Am Son, 17 Aug 2008, Christian Brabandt schrieb:
On Sat, 09 Aug 2008, David Haller wrote: [..] | - sequence of optionally matching atoms: \%[atoms]
Das kapiere ich nicht. Meinen die sowas wie (foo|bar baz)?
Hm, :h /\%[] sagt folgendes:
\%[] A sequence of optionally matched atoms. This always matches. [..] Mir erschließt sich gerade der Sinn nicht. Wenn wir beim Beispiel road bleiben, dann funktioniert ja auch /\<r\(e\|o\)\?a\?d\?\> (vim, \< und \> heißt hier word boundary) Naja, es sieht simpler aus und man versteht es auch schneller, wenn man diese Syntax beherrscht.
Jup.
| - \& (which is to \| what "and" is to "or"; it forces several branches | to match at one spot)
Das kann ich auch nicht nachvollziehen. (foo\&bar) was soll das bringen?
:h /\& 2. A branch is one or more concats, separated by "\&". It matches the last concat, but only if all the preceding concats also match at the same position. Examples: "foobeep\&..." matches "foo" in "foobeep". ".*Peter\&.*Bob" matches in a line containing both "Peter" and "Bob"
Wozu man das braucht, weiß ich aber auch nicht.
Wenn du nicht weißt, ob erst Peter oder Bob in der Zeile steht. Sollte äquivalent zu (Peter.*Bob|Bob.*Peter) sein.
| - matching lines/columns by number: \%5l \%5c \%5v
Das könnte praktisch sein, und das scheint's nicht in perl REs zu geben.
Für einen Editor auf jeden Fall ;)
Zumindest, wenn der die Zeilen-/Spaltennummern auch anzeigt ;)
| - setting the start and end of the match: \zs \ze
Das versteh ich auch wieder nicht ;)
Das ist ziemlich praktisch. Angenommen ich habe eine komplexes Pattern, von dem ich einen Teil ersetzen will, dann kann ich den Match mithilfe von \zs und \ze auf den relevanten Teil einschränken. Zum Beispiel ich habe in einem langen Text mehrmals die Zeile: foo bar baz John foobar Dann kann ich mit :%s/foo bar baz \zsJohn\ze foobar/Alex/g nur den Namen austauschen, ohne im Ersetzungsteil foo bar baz Alex foobar schreiben zu müssen.
s/(foo bar baz )John( foobar)/$1Alex$2/g; Das \zs/\ze erspart einem nur die 4 Klammern, die aber sogar weniger Tipparbeit erfordern und in jedem mir bekanntem RE Mechanismus funktionieren (sed BRE z.B: s/\(foo bar baz \)John\( foobar\)/\1Alex\2/g) [..]
Ich bin durchaus ein Vim Poweruser, aber ich benötige selten diese Advanced Regular Expressions. Ich muß dann auch immer nachschlagen², wie das funktioniert. Wenn man eine Zeitlang auf der Vim Mailingliste mitliest, dann versteht man aber einiges besser.
Glaub ich. Geht mir mit perl und Emacs auch so. Wobei es bei perl inzwischen selten ist.
¹)Erwähnte ich schon, dass die verschiedenen RE Dialekte ziemlich nerven? Ständig nehme ich die falschen und ich muß immer überlegen, ob das aktuelle Tool jetzt dieses Feature kennt oder nicht.
Hm, ich komme mit (POSIX) BRE, ERE (siehe man 7 regex) (samt Emacs-Lisp-Variante) und perlre eigentlich nicht durcheinander. Weitere Dialekte kann ich aber nicht.
²)Wie gesagt, die Doku ist mit das Beste was es beim Vim gibt. Für Reguläre Ausdrücke empfiehlt es sich :h pattern.txt zu überfliegen oder mal im User Manual :h usr_27.txt nachzuschlagen.
perlre (1pm) - Perl regular expressions perlrequick (1pm) - Perl regular expressions quick start perlreref (1pm) - Perl Regular Expressions Reference perlretut (1pm) - Perl regular expressions tutorial Damit kommt man ziemlich weit ;) -dnh, der mit den Modi von vi(m) einfach nicht klarkommt, das wichtigste kann ich aber ;) -- "The internet works because despite the best efforts of the suits the technical people still talk to each other across vendors and try and make sure everything interworks well." -- Alan Cox -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (5)
-
Christian Brabandt
-
David Haller
-
Heinz W. Pahlke
-
Matthias Müller
-
Sandy Drobic