Parceiro obrigado pelas respostas, veja bem, minha dúvida é em relação ao uso do (?m), de forma que eu imaginava que a minha regex, da forma:
Estaria errada para cruzar padrões que iniciassem com jorge em várias linhas, ok!
Eu quero usar o (?m) em Java.
Essa regex funciona em outros programa de teste de regex, como o : Rad Software Regular Expression Disigner.
Funciona em PHP
Funciona em C#
Como foto abaixo.
Como URL, para não bagunçar o texto.
https://sites.google.com/site/autotechsoftware/home/regex5.png
Minha pergunta é justamente por que não funciona no Java, alguém sabe?
Por que o uso do modificador (?m) não funciona da “forma esperada” no Java, encontrei muitos posts gringos falando sobre o uso de MULTILINE, mas eu realmente quero usar o (?m) por questões de estudo, meu foco é na regex (de forma que é a expressão que deveria informação se é mult ou single line!), fico pensando, será que que não foi implementado isso em Java, será que tem algum “bug”, segredo ou macete? Mas como pode? Está na documentação! É essa minha pergunta como usar o (?m) para pesquisar em multiplas linhas???
Alguém já teve problemas semelhante, especificamente com o uso do (?m), funciona perfeitamente em PHP e C#, funciona no programa de teste de regex mas em Java estranhamente o modificador (?m) não funciona… OU eu não estou sabendo como usa-lo, sendo assim, como se usa?
Grato.
Nota: NÃO TEM COMO EU ESPERAR QUE O NOME DO George Corbisier estivesse na lista, só os que iniciam com Jorge.
Para ficar mais claro ainda:
Por que este código não funciona? (Não imprime aceito)
package regexteste;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTeste {
public static void main(String[] args) {
String teste = "jorge1\njorge2\njorge3";
Pattern pat = Pattern.compile ("(?m)^jorge.*");
// ou Pattern pat = Pattern.compile ("^Jorge.*", Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
Matcher mat = pat.matcher(teste);
if(mat.matches()) {
System.out.println("Aceito");
}
else
System.out.println("Errado!");
}
}
Contudo se eu usar:
package regexteste;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTeste {
public static void main(String[] args) {
String teste = "jorge1\njorge2\njorge3";
Pattern pat = Pattern.compile ("(?m)^jorge.*");
// ou Pattern pat = Pattern.compile ("^Jorge.*", Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
Matcher mat = pat.matcher(teste);
while(mat.find()) {
System.out.println(mat.group());
}
}
}
Mas matches()
Não deveria emparelhara (cruzar) a região toda?