Search code examples
phpregeximagepreg-match

Regexp dash or point


I need to match a part of filename on image files. i have 2 type of its :

img000-size.jpg img000.jpg

How can i only match img000 ?

PS : Can i get php code with preg_match please? Thanks


Solution

  • Okay, let me help you...

    regex: /(\w+)(?:-\w+)?\.jpg/i

    data: 477547755-large.jpg

    match: 477547755

    I match a word character between 1 and unlimited times, than optionally a minus with again a word character and then the extension. notice: you have to escape the dot at the extension cause it will be interpreted as 'any char'

    description:

        1st Capturing group (\w+)
            \w+ match any word character [a-zA-Z0-9_]
                Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
        (?:-\w+)? Non-capturing group
            Quantifier: ? Between zero and one time, as many times as possible, giving back as needed [greedy]
            - matches the character - literally
            \w+ match any word character [a-zA-Z0-9_]
                Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
        \. matches the character . literally
        jpg matches the characters jpg literally (case insensitive)
        i modifier: insensitive. Case insensitive match (ignores case of [a-zA-Z])
    

    REGEX101