Re: RegOops
| From: | Karl DeSaulniers | Date: | Fri, 23 Oct 2015 23:38:30 +0000 |
| Subject: | Re: RegOops | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-325220@lists.php.net to get a copy of this message | ||
On Oct 23, 2015, at 7:54 AM, Frank Arensmeier <farensmeier@gmail.com> wrote:
>
>> 23 okt 2015 kl. 14:44 skrev Karl DeSaulniers <karl@designdrumm.com>:
>>
>> Hello all,
>> With the given string..
>>
>> vehicle10-vehicle-name
>>
>> Running regex in a preg_match like
>>
>> "/(\w+)([0-9+]+)-(.*)/"
>>
>> I am getting.
>>
>> array(
>> 0 => vehicle10-vehicle-name
>> 1 => vehicle1
>> 2 => 0
>> 3 => vehicle-name
>> )
>>
>> If I change it to.
>>
>> "/(\D+)([0-9+]+)-(.*)/"
>>
>> it works as expected.
>>
>> array(
>> 0 => vehicle10-vehicle-name
>> 1 => vehicle
>> 2 => 10
>> 3 => vehicle-name
>> )
>>
>> Why is the \w directive including a digit?
>> Since when is the number 1 a word??
>>
>> If anyone could enlighten me, I would greatly appreciate it.
>>
>> TIA
>>
>> Best,
>>
>> Karl DeSaulniers
>> Design Drumm
>> http://designdrumm.com
>>
>
> Hi Karl!
>
> I am not able to pinpoint the exact definition in the official PCRE documentation right now
> (http://www.pcre.org). But the short hand \w does in deed include numbers. As you can read here for
> example (https://docs.oracle.com/javase/tutorial/essential/regex/pre_char_classes.html),
>
> \w A word character: [a-zA-Z_0-9]
>
> Although its already Friday, your pattern is working as expected.
>
> /frank
>
OH, ok, so the \w basically is the shorthand of [a-zA-Z_0-9]?
That would make sense, however I think it is misleading as there are \D and \S which denote grabbing
word and or digits respectfully.
I thought that \w meant one 'word' character (not digit or special characters or space or
new line, just a word),
or at least that is what I have read in my searches, hence the question here.
Thank for your response!
Best,
Karl DeSaulniers
Design Drumm
http://designdrumm.com