39 votes

Java String.indexOf () peut-il gérer une expression régulière comme paramètre ?

Je veux capturer l'index d'une expression régulière particulière dans une chaîne Java. Cette chaîne peut être entourée de guillemets simples ou doubles (parfois sans guillemets). Comment puis-je capturer cet index en utilisant Java ?

par exemple :

capture String -->  class = ('|"|)word('|"|)

46voto

Jigar Joshi Points 116533

Non, c'est moi.

Vérifier le code source pour la vérification

WorkAround : Ce n'est pas une pratique standard, mais vous pouvez obtenir des résultats en utilisant ceci.

Mise à jour :

    CharSequence inputStr = "abcabcab283c";
    String patternStr = "[1-9]{3}";
    Pattern pattern = Pattern.compile(patternStr);
    Matcher matcher = pattern.matcher(inputStr);
    if(matcher.find()){

    System.out.println(matcher.start());//this will give you index
    }

OU

Regex r = new Regex("YOURREGEX");

// search for a match within a string
r.search("YOUR STRING YOUR STRING");

if(r.didMatch()){
// Prints "true" -- r.didMatch() is a boolean function
// that tells us whether the last search was successful
// in finding a pattern.
// r.left() returns left String , string before the matched pattern 
int index = r.left().length();
} 

38voto

Andreas_D Points 64111

C'est une approche en deux étapes. Tout d'abord, trouvez une correspondance pour votre modèle, puis (deuxième) utilisez Matcher#start pour obtenir la position de la chaîne correspondante dans la chaîne de contenu.

Pattern p = Pattern.compile(myMagicPattern);  // insert your pattern here
Matcher m = p.matcher(contentString);
if (m.find()) {
   int position = m.start();
}

0voto

SecretService Points 1469

Basé sur la réponse de @Andreas Dolk, enveloppé dans du code prêt à copier-coller :

/**
 * Index of using regex
 */
public static int indexOfByRegex(CharSequence regex, CharSequence text) {
    return indexOfByRegex(Pattern.compile(regex.toString()), text);
}

/**
 * Index of using regex
 */
public static int indexOfByRegex(Pattern pattern, CharSequence text) {
    Matcher m = indexOfByRegexToMatcher(pattern, text);
    if ( m != null ) {
        return m.start(); 
    }
    return -1;
}

/**
 * Index of using regex
 */
public static Matcher indexOfByRegexToMatcher(CharSequence regex, CharSequence text) {
    return indexOfByRegexToMatcher(Pattern.compile(regex.toString()), text);
}

/**
 * Index of using regex
 */
public static Matcher indexOfByRegexToMatcher(Pattern pattern, CharSequence text) {
    Matcher m = pattern.matcher(text);
    if ( m.find() ) {
        return m;
    }
    return null;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X