У меня есть регулярное выражение, которое будет использоваться для сопоставления тегов @users.
Я использую утверждения lokarround, позволяя знакам препинания и пробелам окружать теги.
Есть дополнительное осложнение, есть тип bb-кодов, которые представляют html.
У меня есть два типа bb-кодов: встроенный (^B
полужирный ^b
) и блоки (^C
центр ^c
).
Встроенные должны быть переданы через, чтобы добраться до предыдущего или следующего символа.
И блоки могут окружать тег, как пунктуация.
Я сделал регулярное выражение, которое работает. Теперь я хочу уменьшить количество шагов, которые он выполняет для каждого персонажа, который не будет совпадать.
Сначала я подумал, что смогу сделать регулярное выражение, которое будет просто искать @
, и когда его найдут, он начнет смотреть на обходные пространства, которые работают без встроенных bb-кодов, но так как просмотр назад не может быть измерен количественно, это труднее, так как я не могу добавьте ((\^[BIUbiu])++)*
внутрь, производя намного больше шагов.
Как я могу сделать свое регулярное выражение более эффективным с меньшим количеством шагов?
Вот его упрощенная версия, в ссылке на Regex101 есть полное регулярное выражение.
(?<=[,\.:=\^ ]|\^[CJLcjl])((\^[BIUbiu])++)*@([A-Za-z0-9\-_]{2,25})((\^[BIUbiu])++)*(?=[,\.:=\^ ]|\^[CJLcjl])
https://regex101.com/r/lTPUOf/4/