Regex - сопоставить шаблон перед персонажем - PullRequest
14 голосов
/ 30 июня 2009

В настоящее время я создаю игрушечный ассемблер на языке c # (прорабатывается Элементы вычислительных систем книга).

Мне нужно сопоставить очень простой шаблон, я подумал, что сейчас самое время выучить некоторые регулярные выражения, но я изо всех сил!

В следующих примерах я просто хотел бы сопоставить буквы перед '='

М = А

D = М

MD = A

A = D

AD = M

AMD = A

Я придумал следующее:

([A-Z]{1,3})=

Однако это также соответствует '=', который я не хочу.

Я тоже пробовал:

([A-Z^\=]{1,3})=

Но у меня все еще есть та же проблема - она ​​также соответствует знаку '='.

Я использую этот сайт для проверки моих регулярных выражений.

Любая помощь будет очень признательна. Заранее спасибо.

Ответы [ 5 ]

30 голосов
/ 30 июня 2009

То, что вы хотите, называется утверждением нулевой ширины. Вы делаете:

(<b>Match this and capture</b>)(?=<b>before this</b>)

В вашем случае это будет:

([A-Z^]{1,3})(?==)
30 голосов
/ 30 июня 2009

Вам необходимо положительное прогнозное утверждение :

([A-Z]{1,3})(?==)
4 голосов
/ 30 июня 2009

Следующая команда сгруппирует все до "=" и все после.

([^=]*)=([^=]*)

это выглядит примерно так:

соответствует любому количеству символов, кроме «=», за которым следует «=», затем любое количество символов, кроме «=».

0 голосов
/ 21 сентября 2012

Мне нужно было сопоставить каждый символ перед '=', поэтому я придумал это

.*(?==)=

Соответствует каждому символу перед '=', но не "="

0 голосов
/ 03 сентября 2009

Вы можете также поставить знак равенства в не захватывающих паранах с (?: ...)

([ADM]{1,3})(?:=)

Прошло немного времени с тех пор, как я сделал эту главу книги, но я думаю, что, так как вам все равно нужны обе части выражения, я сделал разделение на =, что привело к myArray [0] == M, myArray [1] == A

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...