ہم آپ کی توجہ کے لیے جاوا میں ریگولر ایکسپریشنز کے لیے ایک مختصر گائیڈ کا ترجمہ پیش کرتے ہیں، جو
javaworld ویب سائٹ کے لیے Jeff Friesen نے لکھا ہے ۔ پڑھنے میں آسانی کے لیے ہم نے مضمون کو کئی حصوں میں تقسیم کیا ہے۔
جاوا میں باقاعدہ اظہار، حصہ 1
متعدد رینجز کو ضم کرنا |
آپ متعدد رینجز کو ایک دوسرے کے ساتھ رکھ کر ایک رینج کریکٹر کلاس میں ضم کر سکتے ہیں۔ مثال کے طور پر، کلاس [a-zA-Z] لوئر یا اپر کیس میں تمام لاطینی حروف تہجی کے حروف سے میل کھاتی ہے۔ |
متعدد رینجز کو ضم کرنا
آپ متعدد رینجز کو ایک دوسرے کے ساتھ رکھ کر ایک رینج کریکٹر کلاس میں ضم کر سکتے ہیں۔ مثال کے طور پر، کلاس
[a-zA-Z]
لوئر یا اپر کیس میں تمام لاطینی حروف تہجی کے حروف سے میل کھاتی ہے۔
کریکٹر کلاسز کا امتزاج
کریکٹر کلاس یونین کئی نیسٹڈ کریکٹر کلاسز پر مشتمل ہوتی ہے اور نتیجے میں آنے والی یونین کے تمام حروف سے میل کھاتی ہے۔ مثال کے طور پر، کلاس سے سے اور سے تک
[a-d[m-p]]
کے حروف سے میل کھاتا ہے ۔ مندرجہ ذیل مثال پر غور کریں: یہ مثال حروف تلاش کرے گی , , , اور , جس کے لیے مماثلتیں ہیں :
a
d
m
p
java RegexDemo [ab[c-e]] abcdef
a
b
c
d
e
abcdef
regex = [ab[c-e]]
input = abcdef
Found [a] starting at 0 and ending at 0
Found [b] starting at 1 and ending at 1
Found [c] starting at 2 and ending at 2
Found [d] starting at 3 and ending at 3
Found [e] starting at 4 and ending at 4
کریکٹر کلاس انٹرسیکشن
کریکٹر کلاسز کا انٹرسیکشن ان حروف پر مشتمل ہوتا ہے جو تمام نیسٹڈ کلاسوں میں مشترک ہوتے ہیں اور صرف عام حروف سے میل کھاتے ہیں۔ مثال کے طور پر، کلاس
[a-z&&[d-f]]
حروف سے مماثل ہے
d
،
e
اور
f
. مندرجہ ذیل مثال پر غور کریں:
java RegexDemo "[aeiouy&&[y]]" party
نوٹ کریں کہ میرے ونڈوز آپریٹنگ سسٹم پر، ڈبل کوٹس کی ضرورت ہے کیونکہ کمانڈ شیل ان کو
&
کمانڈ سیپریٹر کے طور پر دیکھتا ہے۔ اس مثال میں صرف وہی کردار ملے گا
y
جس میں مماثلت ہے
party
:
regex = [aeiouy&&[y]]
input = party
Found [y] starting at 4 and ending at 4
کریکٹر کلاسز کو گھٹانا
کریکٹر کلاسز کو گھٹانے میں تمام حروف شامل ہوتے ہیں سوائے ان کے جو نیسٹڈ کریکٹر کلاسز میں شامل ہیں، اور صرف ان باقی حروف سے میل کھاتا ہے۔ مثال کے طور پر، کلاس سے to اور from to
[a-z&&[^m-p]]
کے حروف سے مماثل ہے : یہ مثال حروف تلاش کرے گی اور جن کے لیے :
a
l
q
z
java RegexDemo "[a-f&&[^a-c]&&[^e]]" abcdefg
d
f
abcdefg
regex = [a-f&&[^a-c]&&[^e]]
input = abcdefg
Found [d] starting at 3 and ending at 3
Found [f] starting at 5 and ending at 5
پہلے سے طے شدہ کریکٹر کلاسز
شارٹ ہینڈ اشارے کے استعمال کا جواز پیش کرنے کے لیے کچھ کریکٹر کلاسز
باقاعدہ اظہار میں کافی کثرت سے ظاہر ہوتے ہیں ۔ کلاس
Pattern
اس طرح کے مخفف کے طور پر پہلے سے طے شدہ کریکٹر کلاسز پیش کرتی ہے۔ آپ انہیں اپنے ریگولر ایکسپریشنز کو آسان بنانے اور نحوی غلطیوں کو کم کرنے کے لیے استعمال کر سکتے ہیں۔ پہلے سے طے شدہ کریکٹر کلاسز کی کئی قسمیں ہیں: معیاری، POSIX،
java.lang.Character
اور یونیکوڈ خصوصیات جیسے اسکرپٹ، بلاک، زمرہ، اور بائنری۔ مندرجہ ذیل فہرست صرف معیاری کلاسوں کے زمرے کو ظاہر کرتی ہے:
\d
: نمبر۔ مساوی [0-9]
_
\D
: غیر عددی حرف۔ مساوی [^0-9]
_
\s
: وائٹ اسپیس کریکٹر۔ مساوی [ \t\n\x0B\f\r]
_
\S
: وائٹ اسپیس کریکٹر نہیں ہے۔ مساوی [^\s]
_
\w
: لفظ بنانے کی علامت۔ مساوی [a-zA-Z_0-9]
_
\W
: لفظ بنانے والا کردار نہیں۔ مساوی [^\w]
_
درج ذیل مثال
\w
ان پٹ ٹیکسٹ میں تمام الفاظ کے حروف کو بیان کرنے کے لیے پہلے سے طے شدہ کریکٹر کلاس کا استعمال کرتی ہے:
java RegexDemo \w "aZ.8 _"
درج ذیل ایگزیکیوشن کے نتائج کو قریب سے دیکھیں، جو یہ ظاہر کرتے ہیں کہ دورانیہ اور اسپیس حروف کو لفظ کے حروف نہیں سمجھا جاتا ہے۔
regex = \w
input = aZ.8 _
Found [a] starting at 0 and ending at 0
Found [Z] starting at 1 and ending at 1
Found [8] starting at 3 and ending at 3
Found [_] starting at 5 and ending at 5
لائن الگ کرنے والے |
کلاس SDK دستاویزات ڈاٹ Pattern میٹا کریکٹر کو پہلے سے طے شدہ کریکٹر کلاس کے طور پر بیان کرتی ہے جو لائن الگ کرنے والوں کے علاوہ کسی بھی کریکٹر سے میل کھاتا ہے (ایک یا دو حروف کی ترتیب جو لائن کے اختتام کو نشان زد کرتی ہے)۔ مستثنیٰ ڈاٹال موڈ ہے (جس پر ہم آگے بات کریں گے)، جس میں نقطے بھی لائن الگ کرنے والوں سے ملتے ہیں۔ کلاس Pattern درج ذیل لائن الگ کرنے والوں کو ممتاز کرتی ہے:
- گاڑی کی واپسی کا کردار (
\r )
- نیو لائن کریکٹر (کاغذ کی ایک لائن کو آگے بڑھانے کی علامت) (
\n )؛
- کیریج کی واپسی کا کریکٹر فوری طور پر اس کے بعد ایک نئی لائن کریکٹر (
\r\n )
- اگلی لائن کا کردار (
\u0085 )
- لائن الگ کرنے والا کردار (
\u2028 )
- پیراگراف الگ کرنے والی علامت (
\u2029 )
|
پکڑے گئے گروہ
کیپچرنگ گروپ کو پیٹرن کے ذریعے تلاش کرتے وقت مزید استعمال کے لیے حروف کے پائے گئے سیٹ کو محفوظ کرنے کے لیے استعمال کیا جاتا ہے۔
( )
یہ تعمیر قوسین ( ) کے ذریعے میٹا کریکٹرز میں بند حروف کا ایک سلسلہ ہے ۔ پیٹرن کے لحاظ سے تلاش کرتے وقت کیپچر گروپ کے اندر تمام حروف کو ایک مکمل سمجھا جاتا ہے۔ مثال کے طور پر ، کیپچر گروپ (
Java
) حروف کو یکجا کرتا ہے
J
،
a
اور ایک اکائی میں۔ یہ کیپچر گروپ ان پٹ ٹیکسٹ میں پیٹرن کے تمام واقعات تلاش کرتا ہے ۔ ہر میچ کے ساتھ، پچھلے ذخیرہ شدہ حروف کو اگلے حروف سے بدل دیا جاتا ہے۔ پکڑے گئے گروپوں کو دوسرے پکڑے گئے گروپوں کے اندر اندر بنایا جا سکتا ہے۔ مثال کے طور پر، ایک ریگولر ایکسپریشن میں، ایک گروپ کو گروپ کے اندر اندر بنایا جاتا ہے ۔ ہر نیسٹڈ یا غیر نیسٹڈ کیپچر گروپ کو ایک نمبر تفویض کیا جاتا ہے، جو 1 سے شروع ہوتا ہے، اور نمبرنگ بائیں سے دائیں تک جاتی ہے۔ پچھلی مثال میں، کیپچر گروپ نمبر 1 اور کیپچر گروپ نمبر 2 سے مماثلتیں۔ ریگولر ایکسپریشن میں ، کیپچر گروپ نمبر 1 اور کیپچر گروپ نمبر 2 سے مماثلتیں ۔ کیپچر گروپس کے ذریعے اسٹور کردہ میچوں کو بعد میں بیک حوالہ جات استعمال کرکے رسائی حاصل کی جاسکتی ہے۔ بیک سلیش کیریکٹر کے طور پر مخصوص کیا گیا ہے جس کے بعد ایک عددی کریکٹر کیپچر کیے جانے والے گروپ کی تعداد سے مطابقت رکھتا ہے، بیک ریفرنس آپ کو گروپ کے ذریعے کیپچر کیے گئے متن میں حروف کا حوالہ دینے کی اجازت دیتا ہے۔ بیک لنک ہونے کی وجہ سے میچر پکڑے گئے گروپ کے ذخیرہ شدہ تلاش کے نتائج کو اس کے نمبر کی بنیاد پر حوالہ دیتا ہے، اور پھر مزید تلاش کی کوشش کرنے کے لیے اس نتیجے کے حروف کا استعمال کرتا ہے۔ مندرجہ ذیل مثال متن میں گرائمر کی غلطیوں کو تلاش کرنے کے لیے بیک ریفرنس کا استعمال دکھاتی ہے: یہ مثال ان پٹ ٹیکسٹ میں فوراً بعد ایک ڈپلیکیٹ لفظ کے ساتھ گرائمر کی غلطی کو تلاش کرنے کے لیے ایک ریگولر ایکسپریشن کا استعمال کرتی ہے ۔ یہ ریگولر ایکسپریشن پکڑنے کے لیے دو گروپوں کی وضاحت کرتا ہے: نمبر 1 – , اس کے مطابق اور نمبر 2 – ، اس کے بعد اسپیس کریکٹر کے مطابق ۔ بیک ریفرنس گروپ نمبر 2 کے ذخیرہ شدہ نتیجہ کو دوبارہ دیکھنے کی اجازت دیتا ہے تاکہ میچر کسی اسپیس کی دوسری موجودگی کو تلاش کر سکے ، اس کے بعد اسپیس کی پہلی موجودگی کے فوراً بعد اور ۔ میچر کے نتائج درج ذیل ہیں:
v
a
Java
Java
(Java( language))
(language)
(Java)
(Java( language))
(language)
(a)(b)
(a)
(b)
java RegexDemo "(Java( language)\2)" "The Java language language"
(Java( language)\2)
language
Java
"The Java language language"
(Java( language)\2)
Java language language
(language)
language
\2
language
language
RegexDemo
regex = (Java( language)\2)
input = The Java language language
Found [Java language language] starting at 4 and ending at 25
باؤنڈری میچرز
بعض اوقات آپ کو لائن کے شروع میں، لفظ کی حدود میں، متن کے آخر میں، وغیرہ پر پیٹرن میچ کرنے کی ضرورت ہوتی ہے۔ آپ کلاس ایج میچرز میں سے کسی ایک کا استعمال کر کے ایسا کر سکتے ہیں
Pattern
، جو کہ ریگولر ایکسپریشن کنسٹرکٹس ہیں جو درج ذیل جگہوں پر مماثلتیں تلاش کرتے ہیں۔
^
: لائن کا آغاز
$
: لائن کا اختتام
\b
: لفظ کی حد
\B
: سیوڈو ورڈ کی حد
\A
: متن کا آغاز
\G
: پچھلے میچ کا اختتام؛
\Z
: متن کا اختتام، ٹریلنگ لائن الگ کرنے والے کو چھوڑ کر (اگر موجود ہو)؛
\z
: متن کا اختتام
مندرجہ ذیل مثال
^
باؤنڈری میچر میٹا کریکٹر کا استعمال کرتے ہوئے لائنوں کو تلاش کرنے کے لیے استعمال کرتی ہے جو کہ سے شروع ہوتی ہے
The
، اس کے بعد صفر یا زیادہ الفاظ کے حروف ہوتے ہیں:
java RegexDemo "^The\w*" Therefore
کریکٹر
^
اس بات کی وضاحت کرتا ہے کہ ان پٹ ٹیکسٹ کے پہلے تین حروف کو لگاتار پیٹرن کے حروف سے مماثل ہونا چاہیے
T
،
h
اور
e
، جس کے بعد کوئی بھی نمبر ہو سکتا ہے۔ لفظ تشکیل دینے والی علامتوں کا۔ یہاں عملدرآمد کا نتیجہ ہے:
regex = ^The\w*
input = Therefore
Found [Therefore] starting at 0 and ending at 8
اگر آپ کمانڈ لائن کو تبدیل کرتے ہیں تو کیا ہوگا
java RegexDemo "^The\w*" " Therefore"
؟ کوئی مماثلت نہیں ملے گی کیونکہ
Therefore
ان پٹ ٹیکسٹ اسپیس کریکٹر سے پہلے ہوتا ہے۔
زیرو لینتھ میچز
بعض اوقات، ایج میچرز کے ساتھ کام کرتے وقت، آپ کو زیرو لینتھ میچز کا سامنا کرنا پڑے گا۔
Совпадение нулевой длины
ایک ایسا میچ ہے جس میں کوئی حرف نہیں ہوتا ہے۔ وہ خالی ان پٹ ٹیکسٹ میں، ان پٹ ٹیکسٹ کے شروع میں، ان پٹ ٹیکسٹ کے آخری کریکٹر کے بعد، اور ان پٹ ٹیکسٹ کے کسی بھی دو حروف کے درمیان ہو سکتے ہیں۔ زیرو لینتھ میچز کو پہچاننا آسان ہے کیونکہ وہ ہمیشہ ایک ہی پوزیشن پر شروع اور ختم ہوتے ہیں۔ مندرجہ ذیل مثال پر غور کریں:
java RegExDemo \b\b "Java is"
یہ مثال دو متواتر الفاظ کی حدود کو تلاش کرتی ہے، اور نتائج اس طرح نظر آتے ہیں:
regex = \b\b
input = Java is
Found [] starting at 0 and ending at -1
Found [] starting at 4 and ending at 3
Found [] starting at 5 and ending at 4
Found [] starting at 7 and ending at 6
ہم نتائج میں صفر کی لمبائی کے کئی میچ دیکھتے ہیں۔ یہاں ختم ہونے والی پوزیشنیں ابتدائی پوزیشنوں سے ایک کم ہیں، کیونکہ
RegexDemo
میں نے فہرست 1 میں سورس کوڈ میں وضاحت کی ہے
end() – 1
۔
کوانٹیفائرز
کوانٹیفائر ایک ریگولر ایکسپریشن کنسٹرکٹ ہے جو واضح طور پر یا واضح طور پر ایک پیٹرن کو عددی قدر کے ساتھ جوڑتا ہے۔ یہ عددی قدر طے کرتی ہے کہ پیٹرن کو کتنی بار تلاش کرنا ہے۔ کوانٹیفائر کو لالچی، سست اور انتہائی لالچی میں تقسیم کیا گیا ہے:
- لالچی کوانٹیفائر (
?
، *
یا +
) سب سے طویل میچ تلاش کرنے کے لیے ڈیزائن کیا گیا ہے۔ کیا میں پوچھ سکتا ہے X
؟ ایک یا کم واقعات کو تلاش کرنے کے لیے X
، X*
صفر یا زیادہ واقعات کو تلاش کرنے کے لیے X
، X+
ایک یا زیادہ واقعات کو تلاش کرنے کے لیے X
، واقعات کو X{n}
تلاش کرنے کے لیے ، کم از کم (اور ممکنہ طور پر زیادہ) واقعات کو تلاش کرنے کے لیے، اور کم از کم لیکن زیادہ واقعات کو تلاش کرنے کے لیے ۔n
X
X{n,}
n
X
X{n,m}
n
m
X
- سست کوانٹیفائر (
??
، *?
یا +?
) کو مختصر ترین میچ تلاش کرنے کے لیے ڈیزائن کیا گیا ہے۔ آپ X??
, X
? X*
_ صفر یا زیادہ وقوعات کو تلاش کرنے کے لیے X
، X+?
ایک یا زیادہ واقعات کو تلاش کرنے کے لیے X
، واقعات کو X{n}?
تلاش کرنے کے لیے ، کم از کم (اور ممکنہ طور پر زیادہ) واقعات کو تلاش کرنے کے لیے ، اور کم از کم تلاش کرنے کے لیے لیکن واقعات سے زیادہ نہیں ۔n
X
X{n,}?
n
X
X{n,m}?
n
m
X
- انتہائی لالچی کوانٹیفائر (
?+
، *+
یا ++
) لالچی کوانٹیفائر سے ملتا جلتا ہے، سوائے اس کے کہ انتہائی لالچی کوانٹیفائر صرف ایک کوشش کرتا ہے کہ وہ سب سے طویل میچ تلاش کرے، جبکہ لالچی کوانٹیفائر متعدد کوششیں کر سکتا ہے۔ X?+
ایک یا کم واقعات کو تلاش کرنے کے لیے X
، X*+
صفر یا زیادہ واقعات کو تلاش کرنے کے لیے X
، X++
ایک یا زیادہ واقعات کو تلاش کرنے کے لیے X
، کے واقعات کو X{n}+
تلاش کرنے کے لیے ، کم از کم (اور ممکنہ طور پر زیادہ) واقعات کو تلاش کرنے کے لیے، اور کم از کم تلاش کرنے کے لیے لیکن واقعات سے زیادہ نہیں .n
X
X{n,}+
n
X
X{n,m}+
n
m
X
مندرجہ ذیل مثال لالچی کوانٹیفائر کے استعمال کی وضاحت کرتی ہے:
java RegexDemo .*ox "fox box pox"
نتائج یہ ہیں:
regex = .*ox
input = fox box pox
Found [fox box pox] starting at 0 and ending at 10
لالچی کوانٹیفائر (
.*
) میں ختم ہونے والے حروف کی طویل ترین ترتیب تلاش کرتا ہے
ox
۔ یہ پورے ان پٹ ٹیکسٹ کو استعمال کرتا ہے اور پھر اس وقت تک رول بیک کرتا ہے جب تک کہ اسے پتہ نہ لگ جائے کہ ان پٹ ٹیکسٹ ان حروف کے ساتھ ختم ہو جاتا ہے۔ اب سست کوانٹیفائر پر غور کریں:
java RegexDemo .*?ox "fox box pox"
اس کے نتائج:
regex = .*?ox
input = fox box pox
Found [fox] starting at 0 and ending at 2
Found [ box] starting at 3 and ending at 6
Found [ pox] starting at 7 and ending at 10
سست کوانٹیفائر (
.*?
) میں ختم ہونے والے حروف کی مختصر ترین ترتیب تلاش کرتا ہے
ox
۔ یہ ایک خالی تار سے شروع ہوتا ہے اور آہستہ آہستہ حروف کو استعمال کرتا ہے جب تک کہ اسے کوئی میچ نہ مل جائے۔ اور پھر ان پٹ ٹیکسٹ ختم ہونے تک کام جاری رکھے گا۔ آخر میں، آئیے انتہائی لالچی کوانٹیفائر کو دیکھیں:
java RegexDemo .*+ox "fox box pox"
اور اس کے نتائج یہ ہیں:
regex = .*+ox
input = fox box pox
اضافی لالچی کوانٹیفائر (
.*+
) کو مماثلتیں نہیں ملتی ہیں کیونکہ یہ تمام ان پٹ متن کو استعمال کر لیتا ہے اور
ox
ریگولر ایکسپریشن کے آخر میں میچ کرنے کے لیے کچھ بھی نہیں بچا ہے۔ لالچی کوانٹیفائر کے برعکس، انتہائی لالچی کوانٹیفائر پیچھے نہیں ہٹتا ہے۔
زیرو لینتھ میچز
کبھی کبھی کوانٹیفائرز کے ساتھ کام کرتے وقت آپ کو صفر لمبائی کے میچوں کا سامنا کرنا پڑے گا۔ مثال کے طور پر، درج ذیل لالچی کوانٹیفائر کو استعمال کرنے سے متعدد صفر طوالت کے میچ ہوتے ہیں:
java RegexDemo a? abaa
اس مثال کو چلانے کے نتائج:
regex = a?
input = abaa
Found [a] starting at 0 and ending at 0
Found [] starting at 1 and ending at 0
Found [a] starting at 2 and ending at 2
Found [a] starting at 3 and ending at 3
Found [] starting at 4 and ending at 3
پھانسی کے نتائج میں پانچ میچز ہیں۔ اگرچہ پہلے، تیسرے اور چوتھے سے کافی توقع کی جاتی ہے (وہ 3
a
میں تین حروف کی پوزیشن سے مطابقت رکھتے ہیں
abaa
)، دوسرا اور پانچواں آپ کو حیران کر سکتا ہے۔ ایسا لگتا ہے جیسے وہ اشارہ کرتے ہیں کہ متن کے آخر سے کیا
a
مطابقت رکھتا ہے
b
، لیکن حقیقت میں ایسا نہیں ہے۔ باقاعدہ اظہار متن کے آخر میں
a?
تلاش نہیں کرتا ہے ۔
b
یہ موجودگی یا غیر موجودگی کی تلاش کرتا ہے
a
۔ جب
a?
اسے نہیں ملتا ہے تو
a
یہ اسے صفر کی لمبائی کے میچ کے طور پر رپورٹ کرتا ہے۔
نیسٹڈ پرچم کے تاثرات
میچرز کچھ پہلے سے طے شدہ مفروضے بناتے ہیں جنہیں ریگولر ایکسپریشن کو پیٹرن میں مرتب کرتے وقت اوور رائڈ کیا جا سکتا ہے۔ اس مسئلے پر ہم بعد میں بات کریں گے۔ ایک ریگولر ایکسپریشن آپ کو نیسٹڈ فلیگ ایکسپریشن کا استعمال کرتے ہوئے کسی بھی ڈیفالٹ کو اوور رائڈ کرنے دیتا ہے۔ یہ ریگولر ایکسپریشن کنسٹرکٹ سوالیہ نشان میٹا کریکٹر (
?
) کے ارد گرد قوسین کے میٹا کریکٹر کے طور پر بیان کیا جاتا ہے، اس کے بعد ایک چھوٹا لاطینی حرف آتا ہے۔ کلاس
Pattern
مندرجہ ذیل گھریلو پرچم کے تاثرات کو سمجھتی ہے:
(?i)
: کیس غیر حساس پیٹرن کی مماثلت کو فعال کرتا ہے۔ مثال کے طور پر، کمانڈ استعمال کرتے وقت، java RegexDemo (?i)tree Treehouse
حروف کی ترتیب Tree
پیٹرن سے میل کھاتی ہے tree
۔ ڈیفالٹ کیس حساس پیٹرن کی تلاش ہے۔
(?x)
: پیٹرن کے اندر میٹا کریکٹر سے شروع ہونے والے وائٹ اسپیس حروف اور تبصروں کے استعمال کی اجازت دیتا ہے #
۔ میچر دونوں کو نظر انداز کر دے گا۔ مثال کے طور پر، java RegexDemo ".at(?x)#match hat, cat, and so on" matter
حروف کی ترتیب mat
پیٹرن سے میل کھاتی ہے .at
۔ پہلے سے طے شدہ طور پر، وائٹ اسپیس کے حروف اور تبصروں کی اجازت نہیں ہے، اور میچر ان کو تلاش میں شامل کرداروں کے طور پر دیکھتا ہے۔
(?s)
: ڈاٹل موڈ کو فعال کرتا ہے، جس میں ڈاٹ میٹا کیریکٹر کسی دوسرے کردار کے علاوہ لائن سیپریٹرز سے میل کھاتا ہے۔ مثال کے طور پر، کمانڈ کو java RegexDemo (?s). \n
ایک نئی لائن کیریکٹر ملے گا۔ ڈیفالٹ dotall کے برعکس ہے: کوئی لائن الگ کرنے والا نہیں ملے گا۔ مثال کے طور پر، کمانڈ کو Java RegexDemo . \n
کوئی نئی لائن کیریکٹر نہیں ملے گا۔
(?m)
: ملٹی لائن موڈ کو فعال کرتا ہے، جہاں یہ ہر لائن کے ^
آغاز اور $
اختتام سے میل کھاتا ہے۔ مثال کے طور پر، java RegexDemo "(?m)^abc$" abc\nabc
ان پٹ ٹیکسٹ میں دونوں ترتیب تلاش کرتا ہے abc
۔ پہلے سے طے شدہ طور پر، سنگل لائن موڈ استعمال کیا جاتا ہے: ^
پورے ان پٹ متن کے آغاز سے میل کھاتا ہے، اور $
اس کے اختتام سے میل کھاتا ہے۔ مثال کے طور پر، java RegexDemo "^abc$" abc\nabc
جواب دیتا ہے کہ کوئی مماثلت نہیں ہے۔
(?u)
: یونیکوڈ حساس کیس کی سیدھ کو فعال کرتا ہے۔ یہ جھنڈا، جب کے ساتھ استعمال ہوتا ہے (?i)
، یونیکوڈ معیار کے مطابق کیس غیر حساس پیٹرن کی مماثلت کی اجازت دیتا ہے۔ پہلے سے طے شدہ ترتیب صرف کیس-حساس اور US-ASCII حروف تلاش کرنا ہے۔
(?d)
: یونکس طرز کے سٹرنگ موڈ کو فعال کرتا ہے، جہاں میچر سیاق و سباق میں میٹا کریکٹرز کو پہچانتا ہے .
، ^
اور $
صرف لائن الگ کرنے والا \n
۔ پہلے سے طے شدہ غیر یونکس طرز کا سٹرنگ موڈ ہے: مماثل مندرجہ بالا میٹا کریکٹرز کے تناظر میں، تمام لائن ڈیلیمٹرز کو پہچانتا ہے۔
نیسٹڈ پرچم کے تاثرات کیپچرڈ گروپس سے ملتے جلتے ہیں کیونکہ ان کے کردار قوسین میٹا کریکٹرز سے گھرے ہوئے ہیں۔ کیپچرڈ گروپس کے برعکس، نیسٹڈ فلیگ ایکسپریشنز نان کیپچرڈ گروپس کی ایک مثال ہیں، جو کہ ایک ریگولر ایکسپریشن کنسٹرکٹ ہیں جو ٹیکسٹ کریکٹرز کو کیپچر نہیں کرتے ہیں۔ ان کی تعریف حروف کی ترتیب کے طور پر کی جاتی ہے جو قوسین کے میٹا حروف سے گھرے ہوتے ہیں۔
متعدد نیسٹڈ فلیگ ایکسپریشنز کی وضاحت کرنا |
یہ ممکن ہے کہ ایک ریگولر ایکسپریشن میں متعدد نیسٹڈ فلیگ ایکسپریشنز کو یا تو ساتھ رکھ کر ( (?m)(?i)) ) رکھ کر یا ان حروف کو رکھ کر جو ان کی ترتیب سے وضاحت کریں ( (?mi) )۔ |
نتیجہ
جیسا کہ آپ نے شاید اب تک محسوس کیا ہو گا، ریگولر ایکسپریشنز انتہائی مفید ہیں اور اس سے بھی زیادہ کارآمد ہو جاتے ہیں کیونکہ آپ ان کے نحو کی باریکیوں پر عبور حاصل کر لیتے ہیں۔ اب تک میں نے آپ کو ریگولر ایکسپریشنز کی بنیادی باتوں اور
Pattern
. حصہ 2 میں، ہم Regex API کو گہرائی میں دیکھیں گے اور کے طریقوں کو دریافت کریں
Pattern
گے
Matcher
۔
PatternSyntaxException
میں آپ کو Regex API کی دو عملی ایپلی کیشنز بھی دکھاؤں گا جنہیں آپ اپنے پروگراموں میں فوری طور پر استعمال کر سکتے ہیں۔
جاوا میں باقاعدہ اظہار، حصہ 3 جاوا میں باقاعدہ اظہار، حصہ 4 جاوا میں باقاعدہ اظہار، حصہ 5
GO TO FULL VERSION