Вы разрабатываете схему раскраски синтаксиса для своего любимого текстового редактора. Вам нужно регулярное выражение, которое будет соответствовать любому из символов, которые могут использоваться в качестве операторов в языке программирования, для которого вы создаете схему: -, +, *, /, =, <, >, %, &, ^, |, !, ~ и ? Регексу не нужно проверять, образует ли комбинация символов правильный оператор. Это не задача для схемы раскраски синтаксиса; вместо этого она должна просто выделять все символы оператора как таковые.
Решение
1 | [-+*/=<>%&^|!~?] |
Обсуждение
В этой статье речь идет о регулярных выражениях, которые будут использоваться в более крупных системах, таких как схемы раскраски синтаксиса. Такие системы часто комбинируют регулярные выражения с помощью чередования. Это может привести к неожиданным подводным камням, которые могут быть неочевидны при изолированном рассмотрении регулярного выражения.
Один из подводных камней заключается в том, что в системе, использующей это регулярное выражение, скорее всего, есть и другие регулярные выражения, которые соответствуют тем же символам. Многие языки программирования используют / в качестве оператора деления и // для начала комментария. Если вы объедините регулярное выражение из этого рецепта с регулярным выражением из «Однострочных комментариев» в '(?<operator>[-+*/=<>%&^|!~?])|(?<comment>//.*)', то обнаружите, что ваша система никогда не будет соответствовать никаким комментариям.