9

In regex, | is used for alternation. What is the corresponding character in Lua patterns?

Yu Hao
  • 119,891
  • 44
  • 235
  • 294
Jason
  • 123
  • 1
  • 5
  • 1
    See also [Lua string.match uses irregular regular expressions?](http://stackoverflow.com/questions/7138189/lua-string-match-uses-irregular-regular-expressions) – Phrogz May 04 '12 at 17:02

3 Answers3

18

First, note that Lua patterns are not regular expressions; they are their own simpler matching language (with different benefits and drawbacks).

Per the specification I've linked to above, and per this answer, there is no alternation operator in a Lua pattern. To get this functionality you'll need to use a more powerful Lua construct (like LPEG or a Lua Regex Library).

Community
  • 1
  • 1
Phrogz
  • 296,393
  • 112
  • 651
  • 745
  • 7
    I will complement this perfectly good answer by saying that sometimes you can get away with not using LPEG or Lua Regex - a plain ´or´ might do the trick: `if s:match(a) or s:match(b) then ...` – kikito May 04 '12 at 11:30
  • 3
    often you can also get away with a more general match and switch on the result...: `local word = s:match("%w+") if word =="foo" or word == "bar" then.... else ....... end` – daurnimator May 06 '12 at 12:12
  • I came to this question from the perspective of Arduino Regexp (which is based on Lua patterns). I was hoping this answer would include a work-around that I could port. – Michael Molter Aug 01 '16 at 18:34
2

Lua does not have alternations in patterns you cannot use (test1|test2). You can only choose between multiple characters like [abcd] will match a, b, c or d.

-5

Another workaround is: Instead of:

apple|orange

Write:

[ao][pr][pa][ln][eg]

Explanation: match alternate letters from each word. voila!

Alex
  • 15
  • 2