Web lists-archives.com

Re: [PHP] RegOops




On Oct 23, 2015, at 7:54 AM, Frank Arensmeier <farensmeier@xxxxxxxxx> wrote:

> 
>> 23 okt 2015 kl. 14:44 skrev Karl DeSaulniers <karl@xxxxxxxxxxxxxxx>:
>> 
>> 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
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php