Regulární výrazy Java
Co je regulární výraz?
Regulární výraz je posloupnost znaků, která tvoří vyhledávací vzor. Když vyhledáváte data v textu, můžete tento vyhledávací vzor použít k popisu toho, co hledáte.
Regulární výraz může být jeden znak nebo složitější vzor.
Regulární výrazy lze použít k provádění všech typů operací hledání a nahrazování textu .
Java nemá vestavěnou třídu Regular Expression, ale můžeme importovat java.util.regex
balíček pro práci s regulárními výrazy. Balíček obsahuje následující třídy:
Pattern
Třída – definuje vzor (který má být použit při vyhledávání)Matcher
Třída – Používá se k hledání vzoruPatternSyntaxException
Třída – Označuje chybu syntaxe ve vzoru regulárního výrazu
Příklad
Zjistěte, zda se ve větě vyskytují nějaké výskyty slova "w3schools":
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("w3schools", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("Visit W3Schools!");
boolean matchFound = matcher.find();
if(matchFound) {
System.out.println("Match found");
} else {
System.out.println("Match not found");
}
}
}
// Outputs Match found
Příklad vysvětlen
V tomto příkladu se ve větě hledá slovo "w3schools".
Nejprve se pomocí Pattern.compile()
metody vytvoří vzor. První parametr udává, který vzor je vyhledáván, a druhý parametr má příznak, který označuje, že hledání by nemělo rozlišovat malá a velká písmena. Druhý parametr je volitelný.
Metoda matcher()
se používá k vyhledání vzoru v řetězci. Vrací objekt Matcher, který obsahuje informace o provedeném hledání.
Metoda find()
vrací true, pokud byl vzor v řetězci nalezen, a false, pokud nebyl nalezen.
Vlajky
Příznaky v compile()
metodě mění způsob provádění vyhledávání. Zde je několik z nich:
Pattern.CASE_INSENSITIVE
- Velká a malá písmena budou při vyhledávání ignorována.Pattern.LITERAL
- Speciální znaky ve vzoru nebudou mít žádný zvláštní význam a při vyhledávání se s nimi bude zacházet jako s běžnými znaky.Pattern.UNICODE_CASE
- Použijte jej spolu sCASE_INSENSITIVE
příznakem, abyste také ignorovali malá a velká písmena mimo anglickou abecedu
Vzory regulárních výrazů
Prvním parametrem Pattern.compile()
metody je vzor. Popisuje, co se hledá.
Závorky se používají k nalezení řady znaků:
Expression | Description |
---|---|
[abc] | Find one character from the options between the brackets |
[^abc] | Find one character NOT between the brackets |
[0-9] | Find one character from the range 0 to 9 |
Metaznaky
Metaznaky jsou znaky se zvláštním významem:
Metacharacter | Description |
---|---|
| | Find a match for any one of the patterns separated by | as in: cat|dog|fish |
. | Find just one instance of any character |
^ | Finds a match as the beginning of a string as in: ^Hello |
$ | Finds a match at the end of the string as in: World$ |
\d | Find a digit |
\s | Find a whitespace character |
\b | Find a match at the beginning of a word like this: \bWORD, or at the end of a word like this: WORD\b |
\uxxxx | Find the Unicode character specified by the hexadecimal number xxxx |
Kvantifikátory
Kvantifikátory definují množství:
Quantifier | Description |
---|---|
n+ | Matches any string that contains at least one n |
n* | Matches any string that contains zero or more occurrences of n |
n? | Matches any string that contains zero or one occurrences of n |
n{x} | Matches any string that contains a sequence of X n's |
n{x,y} | Matches any string that contains a sequence of X to Y n's |
n{x,} | Matches any string that contains a sequence of at least X n's |
Poznámka: Pokud váš výraz potřebuje vyhledat jeden ze speciálních znaků, můžete je ukončit pomocí zpětného lomítka ( \ ). V Javě musí být zpětná lomítka v řetězcích samy o sobě escapována, takže k escapování speciálních znaků jsou potřeba dvě zpětná lomítka. Chcete-li například vyhledat jeden nebo více otazníků, můžete použít následující výraz: "\\?"