Ифодаи муқаррарӣ як навъ намунаест, ки метавонад ба матн татбиқ карда шавад (String, дар Java). Java бастаи
java.util.regex- ро барои мувофиқ кардани ифодаҳои муқаррарӣ таъмин мекунад. Ифодаҳои муқаррарӣ ба забони барномасозии Perl хеле монанданд ва омӯхтан хеле осон аст. Ифодаи муқаррарӣ ё ба матн (қисми он) мувофиқат мекунад ё не. * Агар ифодаи муқаррарӣ ба порчаи матн мувофиқат кунад, мо метавонем онро пайдо кунем. ** Агар ибораи муқаррарӣ мураккаб бошад, мо метавонем ба осонӣ муайян кунем, ки кадом қисми ибораи муқаррарӣ ба кадом қисми матн мувофиқат мекунад.
Аввалин мисол
Ифодаи муқаррарии "
[a-z] +
" ба ҳама ҳарфҳои хурди матн мувофиқат мекунад.
[a-z]
маънои ҳама гуна аломатро аз
a
фарогир
z
ва
+
маънои "як ё якчанд" аломатро дорад. Фарз мекунем, ки мо сатри "code 2 learn java" -ро пешниҳод мекунем. Инро дар Java чӣ гуна бояд кард Аввал, шумо бояд як қолаб эҷод кунед:
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:
Объекти синф ифодаи ифодаи муқаррариро ташкил медиҳад. Синфи Pattern ягон конструктори оммавиро таъмин намекунад. Барои сохтани қолаб, шумо бояд аввал ба яке аз усулҳои статикии оммавӣ занг занед, ки баъдан an objectи синфро бармегардонад
Pattern
. Ин усулҳо ҳамчун далел ифодаи муқаррариро мегиранд.
Matcher Class:
Объекти Finder муҳаррикест, ки намунаро тафсир мекунад ва амалиёти мувофиқро дар сатри воридот иҷро мекунад. Мисли
Pattern
синф,
Matcher
он конструкторҳои ҷамъиятӣ надорад. Шумо an objectро
Matcher
тавассути даъват кардани метод
matcher
дар an objectи синф ба даст меоред
Pattern
. Пас аз он ки мо ин қадамҳоро анҷом додем ва ҳоло мо як мисоли синф дорем
Matcher m
, мо метавонем тафтиш кунем, ки намуна пайдо шудааст ё не ва агар ин тавр бошад, дар кадом мавқеъ ва ғайра.
m.matches()
Агар намуна ба тамоми сатр мувофиқат кунад true, дар акси ҳол нодуруст бармегардад.
m.lookingAt()
Агар намуна ба аввали сатр мувофиқат кунад true, дар акси ҳол нодуруст бармегардад.
m.find ()
ҳақиқӣ бармегардонад, агар намуна ба ягон қисми матн мувофиқат кунад.
Ҷустуҷӯи мувофиқат
Пас аз мувофиқати бомуваффақият,
m.start() индекси аломати якуми мувофиқро бармегардонад ва
m.end() индекси аломати охирини мувофиқро бар иловаи як бар мегардонад. Агар кӯшиши бемуваффақият анҷом дода шавад ва ҳеҷ гуна мувофиқат пайдо нашавад,
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
Мутобиқати a ё b.
(re)
Гурӯҳи ибораҳои муқаррарӣ ва дар хотир нигоҳ доштани матни ёфтшуда.
(?: re)
Гурӯҳҳои ибораҳои муқаррарӣ, ки матни ёфтшударо дар хотир надоранд.
(?> re)
Ба намунаи мустақил бидуни бозгашт мувофиқат мекунад.
\w
Ҳарфҳо ва рақамҳоро мувофиқат мекунад [a-zA-Z_0-9].
\W
Инҳо ҳарфҳо ё рақамҳо нестанд.
\s
Ҷойҳои мувофиқ. Муодor [\t\n\r\f].
\S
На аломатҳои фосила.
\d
Ба рақамҳо мувофиқат мекунад. Ба [0-9] баробар аст.
\D
Ба рақамҳо мувофиқат намекунад.
\G
Ба нуқтаи бозии охирин мувофиқат мекунад.
\n
Мутобиқати хати нав.
\b
Дар сарҳади калима мувофиқат мекунад.
\B
Дар сарҳади калима мувофиқат намекунад.
\n, \t, etc.
Аломатҳои сатри нав, баргардонидани вагон, ҷадвал ва ғайра.
\Q
Ҳама аломатҳоро пеш аз \E иқтибос кунед.
\E
Иқтибос бо \Q оғоз шуда, ба охир мерасад.
GO TO FULL VERSION