Ajuda com Regex [Resolvido]

Boa tarde!
Sempre tive muita dificuldade com Regex.
Será que alguém poderia me ajudar a achar o caminho das pedras por favor?

Preciso fazer o seguinte tratamento em uma String:
_ preciso obter todos os números até que se encontre um caracter que não seja número. O primeiro caracter da String pode ser ‘+’. Exemplo:

+40045678efd - deve retornar +40045678
40045678+5678 - deve retornar 40045678
Ebs40056789 - deve retornar vazio

Obrigado!

/(^[+]?\d+)/g
^[+]?    - pode começar com +;
\d       - vai pegar tudo que é um digito [0-9];

Olá, obrigado pela resposta
Não entendi como o regex ignoraria os digitos apos o primeiro não digito
Por exemplo 123@456 _ só interessa o 123

Vc executou o regex?

Eu expliquei ali, o trecho:

^[+]?

Vai verificar se tem o sinal de +, se não tiver, ele vai pegar os dígitos, se tiver ele vai pegar o sinal mais os números.

E vai o \d vai pegar os dígitos até a primeira correspondência, o que vem depois disso, exrmplo: 456@123, ele vai pegar só o 456.


output:

Peek 2022-03-27 21-59

Bom dia! Ainda não liguei o note, mas testei num compilador on line pelo celular.
Mas não deu certo. Vou ver direito quando começar a trabalhar.



import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class MyClass {
    public static void main(String args[]) {
      String text =
                "+123abc456";

        String patternString = "/(^[+]?\\d+)/g";

        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(text);
        

        System.out.println("lookingAt = " + matcher.lookingAt());
       
    }
}

/(^[+]?\\d+)/g é sintaxe do JavaScript, não do Java. Em JavaScript, as barras são delimitadores (indicam o início e fim da expressão, mas não fazem parte da regex em si) e o g é uma das várias flags que mudam o comportamento da regex.

Mas em Java não tem isso, não se coloca as barras e nem o g:

String text = "+123abc456";
Pattern pattern = Pattern.compile("^[+]?\\d+");
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
    System.out.println(matcher.group()); // +123
}

E em vez de [+] também poderia ser \+, ou seja: Pattern.compile("^\\+?\\d+");.

1 curtida

vixi, eu nem lembrava que era diferente, valeu hugo

Obrigado!
Funcionou desta forma.