Why do ^ and $ not work as expected?

后端 未结 2 1769
北荒
北荒 2020-12-04 04:12

This puzzled me the last 15 minutes:

if (\'ab\' =~ /^a|b$/) { print \'t\' } else { print \'f\' }
print \"\\n\";

I have expected that \'a\'

相关标签:
2条回答
  • 2020-12-04 04:46

    If you group the alternation, then you will get the expected behavior:

    /^(a|b)$/
    

    Your regex will find a a at the start of the string (with ^a branch) or b at the end (with the b$ branch).

    When you use ^(a|b)$, the anchors are applied to the whole group and thus it will match a string that is equal to a or b.

    Also, if you do not really need to capture the value, you may either use a non-capturing group, /^(?:a|b)$/, or a n modifier, /^(a|b)$/n.

    0 讨论(0)
  • 2020-12-04 05:01

    Your regexp matched ^a or b$, because the alternative operator | has lower precedence than a sequence of concatenated regexps.

    In this particular case (an alternative of single characters) you can simplify it to a class:

    /^[ab]$/
    
    0 讨论(0)
提交回复
热议问题