Помогите сократить регулярное выражение с повторяющимися шаблонами - PullRequest
0 голосов
/ 11 марта 2009

Я сгенерировал следующее регулярное выражение в проекте, над которым я работаю, и оно отлично работает, но из профессионального любопытства мне стало интересно, можно ли его «сжать / укоротить»:

  /[(]PRD[)].+;.+;.*;.+;.+;.*;.*;.*;/

Регулярные выражения всегда казались мне вуду ...

Ответы [ 3 ]

3 голосов
/ 11 марта 2009
/\(PRD\)(.+;.+;.*;){2}(.*;){2}/

короче

/\(PRD\)((.+;){2}.*;){2}(.*;){2}/

но, возможно, менее круто. Оба успешно короче

/[(]PRD[)].+;.+;.*;.+;.+;.*;.*;.*;/

хотя (хотя бы из-за изменения класса персонажа).

Или вы могли бы даже пойти с

/\(PRD\)(.+;.+;.*;){2}.*;.*;/

который может быть самым коротким, который вы можете получить по тем же правилам.

3 голосов
/ 11 марта 2009

Для начала односимвольные блоки могут просто исчезнуть:

/\(PRD\).+;.+;.*;.+;.+;.*;.*;.*;/

Далее вы можете сгруппировать связанные элементы:

/\(PRD\)(.+;){2}.*;(.+;){2}(.*;){3}/

Хотя на самом деле это делает текст более длинным.

2 голосов
/ 11 марта 2009
/\(PRD\).+;.+;.*;.+;.+;(.*;){3}/

Не думаю, что вы много выиграете и придете к тем же точным правилам. Если вы не хотите, чтобы весь текст между ";" необязательно, тогда вы можете:

/\(PRD\)(.*;){8}/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...