Использование [efx]
- это именно то, для чего предназначены классы символов: для соответствия одному из включенных символов. Поэтому это также самое читаемое и самое короткое решение.
Я не знаю, быстрее ли это, но я был бы очень удивлен, если бы не было. Это определенно не будет медленнее.
Мои рассуждения (даже без написания движка регулярных выражений, так что это чистая гипотеза):
Маркер регулярного выражения [abc]
будет применен за один шаг механизма регулярных выражений: «Является ли следующий символ одним из a
, b
или c
?»
(a|b|c)
однако сообщает движку регулярных выражений
- запомнить текущую позицию в строке для возврата, если необходимо
- проверить, возможно ли совпадение
a
. Если это так, успехов. Если нет:
- проверить, возможно ли совпадение
b
. Если это так, успехов. Если нет:
- проверьте, возможно ли совпадение
c
. Если это так, успехов. Если нет:
- сдавайся.