help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: why is this regexp invalid: "\\(?1:\\)"


From: Pascal J. Bourguignon
Subject: Re: why is this regexp invalid: "\\(?1:\\)"
Date: Wed, 08 Dec 2010 15:27:18 -0000
User-agent: Gnus/5.101 (Gnus v5.10.10) Emacs/23.2 (gnu/linux)

David Kastrup <dak@gnu.org> writes:

> pjb@informatimago.com (Pascal J. Bourguignon) writes:
>
>> Joel James Adamson <adamsonj@email.unc.edu> writes:
>>
>>> Ilya Shlyakhter <ilya_shl@alum.mit.edu> writes:
>>>
>>>> (string-match "\\(?1:\\)" "")
>>>> (string-match "\\(?:\\)" "")
>>>
>>> I get 0 from both.
>>
>> Which is expected.  These regexps are not invalid, they're perfectly
>> valid, and match perfectly what they have to match.
>>
>> Read (info "(elisp)Regexp Backslash").
>>
>> Notice that the two regexps have a different meaning.
>>
>> "\\(?1:\\)" matches exactly 0 characters, and assign them the group number 1.
>>
>> "\\(?:\\)" matches exactly 0 characters, if it can (it's shy), and
>> assign them the next group number (which is 1 since it's the first
>> group).
>
> I recommend you check again what a shy group is supposed to be.

Right.  I confounded it with non-greedy.

"\\(?:\\)" matches exactly 0 characters, and do not assign them to any
group number.


>> In both case, when matching the empty string, the result should be 0,
>> since there are 0 character at the position 0 in the empty string.
>
> That much is correct.
>
> -- 
> David Kastrup

-- 
__Pascal Bourguignon__                     http://www.informatimago.com/


reply via email to

[Prev in Thread] Current Thread [Next in Thread]