Регулярдуу туюнтма текстке колдонула турган үлгүнүн бир түрү (String, Java тorнде). Java кадимки туюнтмаларга дал келүү үчүн
java.util.regex пакетин камсыз кылат. Кадимки сөз айкаштары Perl программалоо тorне абдан окшош жана үйрөнүү абдан оңой. Кадимки сөз айкашы же текстке (анын бир бөлүгүнө) дал келет же дал келбейт. * Эгерде кадимки туюнтма тексттин бир бөлүгүнө дал келсе, анда биз аны таба алабыз. ** Эгерде туруктуу сөз айкаштары татаал болсо, анда биз туруктуу сөз айкашынын кайсы бөлүгү тексттин кайсы бөлүгүнө дал келерин оңой эле аныктай алабыз.
Биринчи мисал
Кадимки "
[a-z] +
" сөз айкашы тексттеги бардык кичине тамгаларга дал келет. инклюзивдикке чейинки
[a-z]
каалаган белгини билдирет жана "бир же бир нече" белгини билдирет. Келгиле, биз "code 2 Java окуу куралын үйрөнүү" сабын беребиз деп коёлу. Муну Javaда кантип кылса болот Биринчиден, сиз шаблон түзүшүңүз керек:
a
z
+
import java.util.regex.*;
Pattern p = Pattern.compile(“[a-z]+”);
matcher
Андан кийин диаграммада билдирүү жөнөтүү менен текстти түзүшүңүз керек :
Matcher m = p.matcher(“code 2 learn java tutorial”);
ЭСКЕРТҮҮ: Конструкторлор да жок
Pattern
,
Matcher
биз аларды класстык методдор аркылуу түзөбүз
Pattern
.
Pattern Class:
Класс an objectиси регулярдуу туюнтумдун чагылдырылышын түзөт. Pattern классы коомдук конструкторлорду камсыз кылbyte. Үлгү түзүү үчүн, адегенде жалпы статикалык ыкмалардын бирин чакырышыңыз керек, андан кийин класстын an objectисин кайтарат
Pattern
. Бул ыкмалар аргумент катары туруктуу туюнтманы кабыл алат.
Matcher Class:
Finder an objectиси – бул үлгүнү чечмелөөчү жана киргизүү сабында дал келген операцияларды аткарган кыймылдаткыч.
Pattern
Класс сыяктуу эле ,
Matcher
анын коомдук конструкторлору жок. Сиз класс an objectисинде
Matcher
методду чакыруу менен an object аласыз . Бул кадамдарды аткаргандан кийин, эми бизде класстын үлгүсү бар , биз үлгү табылган же табылбаганын текшере алабыз, эгер табылса, кайсы позицияда ж.б. үлгү бүт сапка дал келсе true, антпесе false кайтарат. Эгерде үлгү саптын башына дал келсе true, антпесе false кайтарат. үлгү тексттин кайсы бир бөлүгүнө дал келсе, чындыкты кайтарат.
matcher
Pattern
Matcher m
m.matches()
m.lookingAt()
m.find ()
Дал келүү
Ийгorктүү дал келгенден кийин,
m.start() биринчи дал келген символдун индексин кайтарат жана
m.end() акыркы дал келген символдун индексин кайтарып берет, ага кошуп бир. Эгерде ийгorксиз аракет жасалып, эч кандай матч табылбаса ,
m.start()
ыргытышат
m.end()
IllegalStateException
- Бул
RuntimeException
сиз аны кармашыңыз керек эмес.
m.end()
Акыркы дал келген символдун индексин бир плюс кайтаруу кызыктай көрүнүшү мүмкүн , бирок
String
.
- Мисалы,
“Now is the time“.substring(m.start(), m.end())
ошол эле сапты кайтарат. Келгиле, codeду карап көрөлү:
import java.util.regex.*;
public class RegexTest {
public static void main(String args[]) {
String pattern = "[a-z]+";
String text = "code 2 learn java tutorial";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(text);
while(m.find()) {
System.out.print(text.substring(m.start(), m.end()) + "*");
}
}
}
Output: code*learn*java*tutorial*
Кошумча методдор
Эгерде дал келүү бар болсо, анда:
m.replaceFirst(replacement)
жаңы сапты кайтарат, мында үлгүгө дал келген биринчи субсап менен алмаштырылатreplacement
m.replaceAll(replacement)
жаңы сапты кайтарат, мында үлгүгө дал келген ар бир субсап алмаштырылат
m.find(StartIndex)
көрсөтүлгөн индекстен баштап кийинки дал келүүнү табыңыз
m.reset()
шаблонду баштапкы абалга келтирет
m.reset(NewText)
тапкычты баштапкы абалга келтирет жана ага жаңы текст берет (балким String
, StringBuffer
же CharBuffer
)
Регулярдуу туюнтма синтаксиси
^
Саптын башына дал келет.
$
Саптын аягына дал келет.
.
Жаңы саптан башка бир символго дал келет. m опциясын колдонуу жаңы сапка дал келүүгө мүмкүндүк берет.
[...]
Кашадагы каалаган бир белгиге дал келет.
[^ ...]
кашаанын ичинде эмес каалаган бир белгиге дал келет.
\A
Бүт линияны баштаңыз.
\z
Бүт линиянын аягы.
\Z
Акыркы саптын терминаторунан башка бүт саптын аягы.
re*
Мурунку туюнтумдун 0 же андан көп көрүнүшүнө дал келет.
re+
Мурунку туюнтмага бир же бир нече дал келүү.
re?
Мурунку туюнтумдун жайгашкан жерине 0 же 1 дал келет.
re{n}
Дал N. Мурунку туюнтумдун кайталануу саны.
re{n,}
Мурунку туюнтмадагы N же андан көп жолу дал келет.
re{n, m}
Мурунку туюнтумдун жок дегенде n жана эң көп m көрүнүшүнө дал келет.
a|b
А же б дал келет.
(re)
Туруктуу сөз айкаштарынын тобу жана табылган текстти эстеп калуу.
(?: re)
Табылган текстти эстебеген туруктуу сөз айкаштарынын топтору.
(?> re)
Эч кандай кайтарымы жок көз карандысыз үлгүгө дал келет.
\w
Тамгаларды жана сандарды дал келет [a-zA-Z_0-9].
\W
Бул тамгалар же сандар эмес.
\s
Боштуктарга дал келет. [\t\n\r\f] менен барабар.
\S
Боштуктун символдору эмес.
\d
Сандарга дал келет. [0-9] менен барабар.
\D
Сандар дал келбейт.
\G
Акыркы матчтын чекитине дал келет.
\n
Жаңы сапка дал келет.
\b
Сөздүн чегинде дал келет.
\B
Сөздүн чегинде дал келбейт.
\n, \t, etc.
Жаңы сап, каретканы кайтаруу, өтмөк ж.б. символдор.
\Q
\E алдында бардык белгилерди цитата кыл.
\E
\Q менен башталган цитата аяктайт.
GO TO FULL VERSION