Preciso criar uma regra no IIS (para fazer o rewrite da URL) em que eu consiga passar uma string no formato JSON (colchetes, chaves, vírgula, dois pontos e aspas).
Estou tentando usar isso mas não funciona
<rule name="aplicarFiltro">
<match url="^aplicar-filtro/([A-Za-z0-9])" />
<action type="Rewrite" url="/app/backend/filtros/aplicar.asp?str={R:1}" />
</rule>
Creio que o problema esteja nessa parte da regra expressão regular:
<match url="^aplicar-filtro/([A-Za-z0-9])" />
Preciso capturar separadamente:
1) Os diretórios (dir1, dir2 e quantos tiverem)
2) Nome da página com sua respectiva extensão
3) O parâmetro com seu respectivo valor (id=123)
Preciso disso para criar umas regras de URL Rewrite no IIS.
Tenho a seguinte REGEX, . Ela serve para detectar se uma URL vem do Youtube ou do Vimeo, e possui os parâmetros necessários.
(?:(?i)(?:https:|http:)?\/\/)?(?:(?i)(?:www\.youtube\.com\/(?:embed\/|watch\?v=)|youtu\.be\/|youtube\.googleapis\.com\/v\/)(?<YoutubeID>[a-z0-9-_]{11,12})|(?:vimeo\.com\/|player\.vimeo\.com\/video\/)(?<VimeoID>[0-9]+))
Ela é totalmente funcional no modelo PCRE (PHP). Testada aqui: https://regex101.com/r/PVdjg0/2
Utilizo estes matches pra testar:
Porém, preciso utiliza-la em um campo HTML dentro do atributo pattern. Por isso, preciso convertê-la para o padrão do JS. Mas aí começam uma série de problemas.
Se eu utilizo como está, recebo o seguinte erro:
? The preceding token is not quantifiable
Testes que realizei:
- Se eu escapar o (?i) desta maneira: (/?i), só são validadas entradas do Vimeo.
- Se eu deixar sem o ?, mesma coisa.
- Se eu retirar a condição (?i), fica case sensitive, e não posso utilizar, pois videos do Youtube tem o parâmetro URL muitas vezes com maisculos, minusculos...
Tenho uma situação onde preciso adicionar um FLAG se o usuário estiver incluindo um link em sua mensagem para que eu possa filtra-la ou não.
Se estiver incluindo um link, preciso checar se esse link está autorizado. Se sim, adiciono um FLAG false, se não, true.
Com links absolutos, isso é simples de ser feito e já tenho feito:
<?php
$regex = "(((https?|ftp):\/\/)?(bit)?([a-z0-9+!*(),;?&=.-]+(:[a-z0-9+!*(),;?&=.-]+)?@)?([a-z0-9\-\.]*)\.(([a-z]{2,4})|([0-9]{1,3}\.([0-9]{1,3})\.([0-9]{1,3})))(:[0-9]{2,5})?(\/([a-z0-9+%-]\.?)+)*\/?(\?[a-z+&$_.-][a-z0-9;:@&%=+/.-]*)?(#[a-z_.-][a-z0-9+$%_.-]*)?)";
$linksAutorizados = ['bit.ly/123'];
$mensagem = [ 'usuario' => 'teste', 'texto' => 'seja bem vindo ao meu site bit.ly/123' ];
$temLink = preg_match ($regex, $mensagem['texto'], $links);
/**
* $links retorna o seguinte array
* 0: "bit.ly/123"
* 3: "bit"
* 7: "ly"
* 8: "ly"
* 13: "/123"
* 14: "3"
*/
if ($temLink) {
/*
* Checo se link da mensagem é igual ao link da lista de linksAutorizados.
* Se o link da mensagem for igual ao link da lista a mensagem não precisa ser filtrada
* Se o link da mensagem for diferente ao link da lista, a mensagem precisa ser filtrada
*/
if ($links[0] == $linksAutorizados[0]) {
$mensagem += [ 'filtrar' => false ];
} else {
$mensagem += [ 'filtrar' => true ];
}
} else {
/*
* Se não encontrar link na mensagem, ela não precisa ser filtrada
*/
$mensagem += [ 'filtrar' => false ];
}
Obs: O acesso aos arrays foi em hardcoded para uma exemplificação mais clara.
O meu problema é:
E se eu quiser liberar links variáveis, ou seja, não importa o subdomínio ou demais parâmetros de querystring, checar somente o dominio
Por exemplo
*.meusite.com.br
meusite.com.br/*
subdominio.meusite.com.br/*
Exemplo de array com links (que podem ser variaveis) autorizados para o usuario:
$linksAutorizados = ['bit.ly/123', 'goo.gl/*', 'meusite.com.br/*' ];
Onde estão os asteriscos seriam os pontos que eu ignoro da verificação para filtro.
Passei o dia fazendo alguns testes e pesquisando material no Stack mas não encontrei nada.
Gostaria de saber como selecionar os trechos em VERDE do texto abaixo, utilizando REGEX. Os trechos em AMARELO são os que se repetem, mas existe um "pedaço" no meio dessa string que apresenta variações. Qual seria o melhor o melhor método para retirar apenas as frases em VERDE?