Вопрос по Perl

User avatar
CTAC_P
Уже с Приветом
Posts: 6789
Joined: 01 Jun 2001 09:01

Вопрос по Perl

Post by CTAC_P »

Помогите составить регулярное выражение, которое проверяет что буквы в строке упорядочены по алфавиту.
Niky
Уже с Приветом
Posts: 550
Joined: 31 Mar 2000 10:01
Location: Moscow --> Baltimore, MD

Post by Niky »

Так?

/^A*a*B*b*C*c*D*d*E*e*F*f*G*g*H*h*I*i*J*j*K*k*L*l*M*m*N*n*O*o*P*p*Q*q*R*r*S*s*T*t*U*u*V*v*W*w*X*x*Y*y*Z*z*$/
_alex_
Уже с Приветом
Posts: 246
Joined: 08 May 2002 06:44

Post by _alex_ »

Так а функцией не легче сделать? вызвать split, получить массив символов, отсортироватгь и проверить с оригиналом?
User avatar
CTAC_P
Уже с Приветом
Posts: 6789
Joined: 01 Jun 2001 09:01

Post by CTAC_P »

_alex_ wrote:Так а функцией не легче сделать? вызвать split, получить массив символов, отсортироватгь и проверить с оригиналом?

Нет, надо через regexp's
User avatar
CTAC_P
Уже с Приветом
Posts: 6789
Joined: 01 Jun 2001 09:01

Post by CTAC_P »

Niky wrote:Так?

/^A*a*B*b*C*c*D*d*E*e*F*f*G*g*H*h*I*i*J*j*K*k*L*l*M*m*N*n*O*o*P*p*Q*q*R*r*S*s*T*t*U*u*V*v*W*w*X*x*Y*y*Z*z*$/

Не работает :(
catwalk
Posts: 11
Joined: 30 May 2002 04:16

Post by catwalk »

если строка с пробелами, то так:

/^\s*a*\s*b*\s*c*...\s*z*\s*$/i
Niky
Уже с Приветом
Posts: 550
Joined: 31 Mar 2000 10:01
Location: Moscow --> Baltimore, MD

Post by Niky »

CTAC_P wrote:
Niky wrote:Так?

/^A*a*B*b*C*c*D*d*E*e*F*f*G*g*H*h*I*i*J*j*K*k*L*l*M*m*N*n*O*o*P*p*Q*q*R*r*S*s*T*t*U*u*V*v*W*w*X*x*Y*y*Z*z*$/

Не работает :(

А на какой строчке не работает?
User avatar
CTAC_P
Уже с Приветом
Posts: 6789
Joined: 01 Jun 2001 09:01

Post by CTAC_P »

Все работает, я программу удаленно отлаживаю, по телефону :D
bugfighter
Уже с Приветом
Posts: 147
Joined: 06 Mar 2003 07:40

Post by bugfighter »

Niky wrote:Так?

/^A*a*B*b*C*c*D*d*E*e*F*f*G*g*H*h*I*i*J*j*K*k*L*l*M*m*N*n*O*o*P*p*Q*q*R*r*S*s*T*t*U*u*V*v*W*w*X*x*Y*y*Z*z*$/


Проще и лучше так:
/^a*b*c* ... ну и т.д ... z*$/i
Niky
Уже с Приветом
Posts: 550
Joined: 31 Mar 2000 10:01
Location: Moscow --> Baltimore, MD

Post by Niky »

bugfighter wrote:
Niky wrote:Так?

/^A*a*B*b*C*c*D*d*E*e*F*f*G*g*H*h*I*i*J*j*K*k*L*l*M*m*N*n*O*o*P*p*Q*q*R*r*S*s*T*t*U*u*V*v*W*w*X*x*Y*y*Z*z*$/


Проще и лучше так:
/^a*b*c* ... ну и т.д ... z*$/i

Проще - да. Лучше - нет. Где сказано, что сортировка должна быть case insensitive?

P.S.: а что, в Perl уже есть такая конструкция " ... ну и т.д ... "? :lol:
bugfighter
Уже с Приветом
Posts: 147
Joined: 06 Mar 2003 07:40

Post by bugfighter »

Niky - это нигде не сказанно, так как в противном случае были бы даны условия для этой самой сортировки. Ваш вариант спрокойно проглотит AAaaaBBBbCCCd, но не пропустит AaAbBBcCC - в общем, для case sensitive ваш вариант вообще себя ведёт, более чем странно мягко говоря. Если уж и сортировать с учётом регистра, то лучше что-то типа A*B*C*.... a*b*c* и т.п. (набирать полные строки мне недосуг)
Niky
Уже с Приветом
Posts: 550
Joined: 31 Mar 2000 10:01
Location: Moscow --> Baltimore, MD

Post by Niky »

bugfighter wrote:Niky - это нигде не сказанно, так как в противном случае были бы даны условия для этой самой сортировки.

Ну стало быть у нас с Вами разные параметры по умолчанию :) .
bugfighter wrote:Ваш вариант спрокойно проглотит AAaaaBBBbCCCd, но не пропустит AaAbBBcCC - в общем, для case sensitive ваш вариант вообще себя ведёт, более чем странно мягко говоря.

Это как раз нормальное поведение для dictionary order, case sensitive: A<a<B...
bugfighter wrote:Если уж и сортировать с учётом регистра, то лучше что-то типа A*B*C*.... a*b*c* и т.п. (набирать полные строки мне недосуг)

А вот это уже binary order, case sensitive. В этом случае даже AAaaaBBBbCCCd не пройдет, что действительно более чем странно, мягко говоря.

Return to “Вопросы и новости IT”