Re: RegOops
| From: | Karl DeSaulniers | Date: | Sat, 24 Oct 2015 01:06:50 +0000 |
| Subject: | Re: RegOops | ||
| References: | 1 2 3 4 5 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-325223@lists.php.net to get a copy of this message | ||
This is where I tested at.
http://www.phpliveregex.com
Could it be their parser doing this or is this correct protocol?
Just seems odd to me.
Best,
Karl DeSaulniers
Design Drumm
http://designdrumm.com
On Oct 23, 2015, at 8:04 PM, Karl DeSaulniers <karl@designdrumm.com> wrote:
> Correct.
>
> So with my case in needing to grab just words,
>
> [\D] will grab all words, dashes, hyphens etc.
> Same with [\S].
>
> In essence grabbing all words if there is nothing else to grab except a number.
> However, the shorthand \w does not and would seem (to me) that it should by definition only
> capture words and not the number 1.
> Franks explanation makes some sense to me, but how come it didn't grab the number 0 then?
> If you notice, the 10 got split up.
>
> Best,
>
> Karl DeSaulniers
> Design Drumm
> http://designdrumm.com
>
>
>
> On Oct 23, 2015, at 7:54 PM, German Geek <geek.de@gmail.com> wrote:
>
>> In regular expressions a backslash capital letter means the opposite. So, \D is NON-digits,
>> \W is NON-word characters and \S is NON-whitespace. You can also do [A-z]* to get all letters in the
>> English language plus the characters between them like ^ and literal \.
>>
>> I believe you can also do Unicode ranges with the respective \usomehex, but I haven't
>> tried that yet.
>>
>> Tim
>>
>> On Sat, 24 Oct 2015 at 12:38 Karl DeSaulniers <karl@designdrumm.com> wrote:
>> 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
>> --
>> PHP General Mailing List (http://www.php.net/)
>> To unsubscribe, visit: http://www.php.net/unsub.php
>>
>