In regex, |
is used for alternation. What is the corresponding character in Lua patterns?
Asked
Active
Viewed 4,879 times
9
-
1See 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 Answers
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).
-
7I 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
-
3often 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
.

Деян Добромиров
- 833
- 1
- 10
- 22
-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