Pergunta

Estou tentando corresponder a quaisquer solicitações de um URL que não tenha um caractere de pasta (/) ou termine com uma extensão (.aspx). Eu posso ignorar os valores e fragmentos de tentativa de consulta na expressão regular por enquanto. Até agora eu tenho o seguinte.

^([\w-/]+)(?!\.aspx|/)$

No entanto, se eu executar essa expressão, ele selecionou o final / no grupo que não quero que ele faça. O objetivo é anexar .aspx aos URLs que não o especificam usando o ISAPI reescrever e encaminhar a solicitação para o mecanismo .NET.

O exemplo abaixo mostra todos os caracteres em uma partida atual em negrito

asd.aspx
isto
algo.aspx
esse teste/ (não quero o final /)
esse teste/ (não quero o final /)
esse teste
Este teste/that/teste

Alguém pode sugerir uma expressão que não selecionasse o final / se encontrado na expressão?

Foi útil?

Solução

Experimente uma afirmação de aparência:

^([\w-/]+)(?<!/|\.aspx)$

Outras dicas

Mova / fora do grupo ():

^([\w-/]+)(?!\.aspx)/?$

Sua primeira frase não corresponde à sua expressão ou exemplos regulares.
Parece -me que você quer:

  1. Se a string terminar com .aspx Não processe mais.
  2. Caso contrário, se a string terminar com / Remova essa barra.
  3. Processe a string.

Talvez você esteja tentando fazer muito com uma expressão regular?

Por que não testar explicitamente sua extensão (.aspx) e, se você não tiver, detecte uma barra de terminal e remova -a antes do processamento extra da string?

Ou seja: tenho certeza de que é possível criar uma expressão regular, com aparência negativa, que fará 1 e 2, mas não seria mais claro fazê -lo explicitamente.

Você também pode querer testar mais alguns exemplos:

foo/bar/.aspx
foo/bar.aspx/
foo.aspx/bar
foo.aspx/bar/

Só para ter certeza de que você sabe o que está esperando como saída.

Remova o / do regex e adicione -o para fora e especifique que ele pode ter 0 ou 1 ocorrência.

^([ w-/]+) (?!. ASPX) (/) {0,1} $

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top