Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera...
me ajudem com essa please..
seguinte..
gostaria de abstrair de uma expressão regular as seguintes informações...
eu tenho a seguinte string e suas possiveis variações:
[abc] as abc
[1 + 2] as abc
[abc({0},{2})] as abc
Gostaria de abstrair dessa string o conteudo dentro de "[...]", porém, o "[" e "]" são opcionais na string...
sendo assim eu criei a seguinte ER:
(\[)?(?<grupocaptura>(.*?))(\])?
bom, o problema é que essa ER sempre retorna vazio para o grupo, o problema eu identifiquei, sabe aquele ultimo "?" em negrito?, quando eu o REMOVO ai funciona, tipo... como eu faço isso funcionar ja que a variação dentro de "[...]" só pode ser representada por ".*?" ?
Obrigado
[]s
<?php
//$str = '[abc] as abc';
//$str = '[1 + 2] as abc';
$str = '[abc({0},{2})] as abc';
$mtc = array();
preg_match( '/\[?([^\]]+)\]?(?:\s*(?:as\s+(\w+)))/' , $str , $mtc );
var_dump( $mtc );Opa..saquei a ideia...
porem esqueci de dizer uma coisa...
o "as abc" tb pode ser opcional... isso muda algo na er?
>
o "as abc" tb pode ser opcional... isso muda algo na er?
Bom, se é tudo opcional então não é uma expressão regular, pode ser qualquer coisa a qualquer momento. A não ser que exista uma regra clara, fica complicado.
<?php
//$str = '[abc] as abc';
//$str = '[1 + 2] as abc';
$str = '[abc({0},{2})] as abc';
$mtc = array();
preg_match( '/\[?([^\]]+)\]?(?:\s*(?:as\s+(\w+)))?/' , $str , $mtc );
var_dump( $mtc );Logico que é um ER...
imagina um field de um SELECT ... ele pode ter alias com quotes, sem quotes, com ou sem alias, o alias pode ou não ter quotes tb... pode ou não pode haver o "AS" ... se ER não resolve isso oq resolveria então!??
bom, eu to quase conseguindo aki... quando acabar posto...
note:
você disse que tem
[abc] as abc e [1+2] as abc
e disse que os colchetes são opcionais, o que nos remete a
abc as abc
1+2 as abc
e disse que os "as abc" também são opcionais
abc
1+2
cadê a regularidade da expressão?
Cara, q regularidade, o importante é conseguir usando isso...e eu estou quase lá...
$mtc = array();
$parent = get_named_with_quote('parent');
$name = get_named_with_quote('name');
$alias = get_named_with_quote('alias');
$pattern = "($parent\.)?$name(\s*AS\s*|\s*)?$alias";
preg_match("/$pattern/i", $str1, $mtc );
var_dump( $mtc );
function get_named_with_quote($name) {
$quotes_open = "\[";
$quotes_close = "\]";
return "(?P<{$name}d1>[$quotes_open]?)(?P<{$name}>[^$quotes_close]+)(?P<{$name}d2>[$quotes_close]?)";
}
o último .* já engloba o fechamento do colchetes