Мой вопрос: как далеко вы можете зайти?
В интересах не создавать код, который является нечитаемой болваной пунктуации, я рискну понизить число голосов и ответитьдругой, хотя и очень связанный вопрос: как далеко должен пройти?
Синтаксические анализаторы регулярных выражений - это блестящий , который нужно иметь вВаш инструментарий, но они не все, и конец всего программирования.* Способность писать синтаксические анализаторы в удобочитаемом виде - также блестящая вещь в вашем наборе инструментов.
Регулярные выражения должны использоваться вплоть до того момента, когда они начнут усложнять ваш код.Понимаю.Кроме того, их ценность в лучшем случае сомнительна, а в худшем - губительна.Для этого конкретного случая, вместо того, чтобы использовать что-то вроде отвратительного:
~^(?=(a(?-1)?b)c)a+(b(?-1)?c)$~x
(с извинениями перед NikiC), который подавляющее большинство людей, пытающихся поддержать его, либо полностью заменит, либо потратит существенное время, читая и понимая, вы можете рассмотреть что-то вроде решения не-RE, «правильного парсера» (псевдокод):
# Match "aa...abb...bcc...c" where:
# - same character count for each letter; and
# - character count is one or more.
def matchABC (string str):
# Init string index and character counts.
index = 0
dim count['a'..'c'] = 0
# Process each character in turn.
for ch in 'a'..'c':
# Count each character in the subsequence.
while index < len(str) and str[index] == ch:
count[ch]++
index++
# Failure conditions.
if index != len(str): return false # did not finish string.
if count['a'] < 1: return false # too few a characters.
if count['a'] != count['b']: return false # inequality a and b count.
if count['a'] != count['c']: return false # inequality a and c count.
# Otherwise, it was okay.
return true
Это будет далеколегче поддерживать в будущем.Я всегда хотел бы предложить людям, чтобы они считали, что те, кто идет за ними (которые должны поддерживать код, который они пишут), являются психопатами, которые знают, где вы живете - в моем случае, это может быть наполовину верно, японятия не имею, где вы живете: -)
Если у вас нет реальной потребности в регулярных выражениях такого рода (а иногда есть веские причины, такие как производительность в интерпретируемых языках), выследует оптимизировать для читаемость сначала.