Hjälp:Regex

Från Rilpedia

(Skillnad mellan versioner)
Hoppa till: navigering, sök
(Important Notes About Lookbehind)
Rad 28: Rad 28:
=== Important Notes About Lookbehind ===
=== Important Notes About Lookbehind ===
-
'''The good news is''' that you can use lookbehind anywhere in the regex, not only at the start.  If you want to find a word not ending with an "s", you could use <code>"\b\w+(?<!s)\b"</code>.  This is definitely not the same as "\b\w+[^s]\b".  When applied to "John's", the former will match "John" and the latter "John'" (including the apostrophe).
+
'''The good news is''' that you can use lookbehind anywhere in the regex, not only at the start.  If you want to find a word not ending with an "<code>s</code>", you could use "<code>\b\w+(?<!s)\b</code>".  This is definitely not the same as "<code>\b\w+[^s]\b</code>".  When applied to "John's", the former will match "<code>John</code>" and the latter "<code>John'</code>" (including the apostrophe).
'''The bad news is''' that most regex flavors do not allow you to use just any regex inside a lookbehind, because they cannot apply a regular expression backwards.  Therefore, the regular expression engine needs to be able to figure out how many steps to step back before checking the lookbehind.
'''The bad news is''' that most regex flavors do not allow you to use just any regex inside a lookbehind, because they cannot apply a regular expression backwards.  Therefore, the regular expression engine needs to be able to figure out how many steps to step back before checking the lookbehind.

Versionen från 15 april 2007 kl. 00.58

Ril_red.png
Rilpedia artikel
rpsv.header.diskuteraikon2.gif

Regex - for advanced text processing - with the use of Regular Expressions. Below a compressed version of text from more complete Regex references.

Positive and Negative Lookahead

Negative lookahead
Match something not followed by something else.
Example
A q that is not followed by a u: q(?!u)".
(inside the lookahead we have the trivial regex "u").
Positive lookahead
Match something not followed by something else.
Example
A q that is followed by a u "q(?=u)"
(without making the u part of the match.
Set a variable with the match-result
Put capturing parentheses around the regex inside the lookahead, like this: "(?=(regex))".


Positive and Negative Lookbehind

Positive lookbehind
(?<=text)x - Match something which is preceded by something else.
Example
Match only a b which is preceeded by an a.
In "cab" the regex "(?<=a)b" matches the "b" (and only the "b"), but does not match "bed" or "debt".
Negative lookbehind
(?<!text)x - Match something which is not preceded by something else.
Example
A "b" that is not preceded by an "a": (?<!a)b
It will not match "cab", but will match the "b" (and only the "b") in "bed" or "debt".

Important Notes About Lookbehind

The good news is that you can use lookbehind anywhere in the regex, not only at the start. If you want to find a word not ending with an "s", you could use "\b\w+(?<!s)\b". This is definitely not the same as "\b\w+[^s]\b". When applied to "John's", the former will match "John" and the latter "John'" (including the apostrophe).

The bad news is that most regex flavors do not allow you to use just any regex inside a lookbehind, because they cannot apply a regular expression backwards. Therefore, the regular expression engine needs to be able to figure out how many steps to step back before checking the lookbehind.

Therefore, only fixed-length strings are allowed. This means you can use literal text and character classes. You cannot use repetition or optional items. You can use alternation, but only if all options in the alternation have the same length.


The only regex flavors that allow you to use a full regular expression inside lookbehind are RegexBuddy (2.0.3 and later), PowerGREP (3.0.0 and later), and the .NET framework (all versions).


Personliga verktyg