š‚ƒ ’ŸĮĶ‚— ͆—Įˉ ’Į̓ ’‰ĮĶŌ


‚ П•Ķ…œŸĮ ş›Į : ÜßĮ ś‹–

Į߂‡ ’‚ž‹š— ’‰ĮĶŌ Ż‚˜œ ’ŸĮĶ‚— ÅĮĶŌ‚Š› ĪĮ Ƃœ…‡Į


ąšŠ
ąé— ŽĄ ĪĮ Üéƒé– ‚éžé…Ė› Į߂‡ ąƒ ŌßƒĶ› ܟ‚‹› ĶĖ ÜßĮĖ…› Ś—Œ› ĪĮ įĶ‚Ÿ‹ƒ
ąé›‚œĶƒ (Performance) ’ŸĮĶ‚— ąĶ‚ƒĶĖ ŽĖĶ— Ķ—• ąƒ Öß͌ ’…‰ Ž‚˜ĖœĪ‚‹ ƙ’Į
’éŒ‚éœ ’é‰ĮĶéŌ ą™‰Ķ› ĶĖ Šš— ’‰ĮĶŌ ąĶ‚ƒĶĖ ąŸ™ßĮ ’‚žŸĶŸ˜ ݟ›… ĪĮ ¬Ėœœ—
ĖĶé—é™› ÜßĮĖ…› ÅĮĶŌ‚Š› ’ސƒ ąĶ‚ƒĶĖ ą™‚–› ޟĮ ĶĖ Š…œĖߘ Ž‚ŸĮ̓ .˜ߌ’›
.˜— ’› ʉƒ ’‰ĮĶŌ Ž‚›Ī ĶĖ ‚žœĄ ĪĮ Ƃœ…‡Į ’˜œß˜ˆ ß Į߂‡

Ķé—é• ĖĶé—é™é›é ÅéŸĶŸĖ› ąƒ ÅŠ‚‹ ąĶßĖ ĶŠĮßĮ ‚… ‚ž‹Ÿßœ ą›‚œĶƒ ĪĮ įĶ‚Ÿ‹ƒ
ąƒ ¬ĖœĪĮ˜Į’› ٟߐ… ąƒ Ķ‚— Ž‚Ÿ‚„ ‚… ĮĶ ĖĶ—™› ݟ՜… ƙ’Į ‚žœĄ .˜œ—’›œ
ą…ƒ™Į ’Ļ…ĮĶ…‹Į ޟĮ .˜œ— Ƃœ…‡Į ŽĄ ĪĮ ’™— ąƒ ĖœœĮ߅ƒ ˟‚Œ ą— ĖŸ›Į ޟĮ
’é‰ĮĶéŌ Ž‚é›Ī ĶĖ ąéŸ™ßĮ ’‚žŸĶŸ˜ ݟ›… ܂‰ ޟĮ ‚ƒ .ŋĮ Ο›Ą ş–•ß› ’‚˜
ĶĮĢé˜Ķ韆‚… ŽĄ ş–•ß› ß ’ŸĮĶ‚— ͆—Įˉ Üߍ‰ ß ŻŸÕœ… ąƒ Ī‚Ÿœ ̓ ˜œĮ߅’›
ĪĮ ¬ĖßéŒ ÜéŸĖéƒé… ‚›Œ ą›‚œĶƒ ĶĖ ’Įą™ģ‹› ąƒ ’ŸĮĶ‚— ˌ‚ƒ ĶĮĶ– ͘Į .˜Œ‚ƒ
.Ėߌ Ķß՜› Ŋ‚‹ ß ’‰ĮĶŌ ąĶßĖ ĶĖ ĖŸ‚ƒ ’ŸĮĶ‚— ÅŸĶŸĖ› ĮĖ…ƒĮ Ž‚›

ŌßéƒĶé› ąŸ™ßĮ ’‚žŸĶŸ˜ ݟ›… ̓ ĶĮ̘͟†‚… ’‚žĮĶ ĪĮ ’ސƒ Ś‚–› įĶ‹ ޟĮ
ĪĮ ’é—éŸ ąé™‚–› ޟĮ ĶĖ .˜œ—Ÿ› ’‹Ķ̓ ĮĶ įĖĶƒĶ‚— ą›‚œĶƒ ’ŸĮĶ‚— ’‰ĮĶŌ ąƒ
. ŻéŸéœé— ’é› ’é‹Ķ̓ ĮĶ Å–ß› ’ŸŒ ڟ Ė‚‡ŸĮ ’œŸ ’ŸĮĶ‚— Ś—Œ› ŽŸĶ…™ßĮĖ…›
Ėß錟› ޟŸ… ’‰ĮĶŌ Ž‚›Ī ĶĖ Ė› ͟’ Ķßԃ ƙ’Į К— ڟ ĶĖ ’ŸŒ Ė‚‡ŸĮ Ķ‚…•Ķ
.˜—’› ąĖ‚›Ą ’ŸĄĶ‚— ąƒ ŌßƒĶ› įːƒ Ś—Œ› ’Į̓ ĮĶ ąœŸ›Ī ß

Ķé…éœ‚é‹Ą ą› ĪĮ ‚žœĄ ɚĮ ą— ’…š—Œ› .˜ĶĮĖ ’…ß‚•…› ÖĮߜĮ ’ŸĄĶ‚— Ś—Œ›
ąéƒé‹‚鉛 Ż‚‡œĮ ’Į̓ ؟Ž Ż…ŸĶߘ™Į ڟ ƂŠ…œĮ ą‡Ÿ…œ ą— Ėœ…‹ ’Ÿ‚žœĄ ŋĮ
ąĖĮĖ ąéß雇› ڟ ŽĖĶ— Ć…Ķ› ’Į̓ bubble-sort Ż…ŸĶߘ™Į ĪĮ ąĖ‚•…‹Į ˜œ‚›
Ķé ĶĖ ĖßéŒ’é› ąĖ‚•…‹Į ‚žœĄ ĪĮ Ė‚ŸĪ ą— ’Ÿ‚ąĖĮĖ ąĶ‚ƒßĖ ąƒ‹‚‰› ‚Ÿ ŪĶ΃
ĖéŸéœĮ߅’› ĮĶ Åš—Œ› Öߜ ޟĮ .˜…‹ ‚žœĄ įĪ‚‹ ąĶŸŠĢ ’‚‡ ąƒ ¬ąĖ‚•…‹Į Ķ‚ƒ
’éŸĮĶ‚— Ś—Œ› ĪĮ įĶ‚Ÿ‹ƒ ܂‰ ޟĮ ‚ƒ .˟œ— ŲĶŌ̓ ÅĶ‹ ąƒ ß Į˟„ ’œ‚‹Ą ąƒ
’ĮĪé‡Į ŠéŸ•Ķ…œŸĮ ’‰ĮĶŌ :ŋĮ Ķ…ĶĮßŒĖ ŽĄ ɚĮ ą— ĖœĶĮĖ įĶ…–Ÿ› ‚Œœ› Į߂‡
.ą›‚œĶƒ ڟ ąĖœĪ‚‹

ĖéœĮąĖéŒ ą…Š‚‹ Å—ĶŒ ܊ĮĖ ĶĖ ‚Ÿ ą— ĖœßŒ’› ą…Š‚‹ ’ŸĮ·Į ĪĮ ‚ą›‚œĶƒ ƙ’Į
’ĮĪé‡Į ąƒ ‚ą›‚œĶƒ ą— ’œ‚›Ī ’…‰ .˜ĮąĖŒ ą…•Ķ˜ ͘ŸĖ ąĖœœ— ąŽĶ ڟ ĪĮ ‚Ÿ
ĮĶ įĖĶéƒĶ‚é— ’‚éąé›‚œĶƒ Į͘’ŸŒ ’‰ĮĶŌ ¬Ėœ…‹Ÿœ ’—…› Ė߇ߛ џ„ ĪĮ ąĖœĪ‚‹
ß ÅéŠ‚é‹ ¬’é‰ĮĶéŌ Ķ‚é— ŽŸĮ Žßˆ ¬ĖœßŒ ݟ‹–… ąĖœĪ‚‹ ’Į·Į ąƒ Ėœ—’› ٟߌ…
ĖéŸ‚éƒ ¬‚éĪ‚韅›Į ޟĮ ŽĖ߃ ĶŸĢ„‚œĶ‚—œĮ Ėß‡ß ‚ƒ .˜— ’› Ž‚‹Ą ĮĶ ŃŸ‚›ĪĄ
Åé‹Į Žé—é›é› ąĖœĪ‚‹ ’Į·Į ‚ƒ ąĖŒ ąĖ‚Ÿ„ ’‚ž‹Ÿ•Ķ…œŸĮ ą— ĖŸŒ‚ƒ ą…ŒĮĖ ą‡ß…
Ėéœéœé—’é› ąĖ‚•…‹Į ‚žœĄ ĪĮ ą— ’Ÿ‚ą›‚œĶƒ ’ŸĮĶ‚— ß Ķ‚…•Ķ ̓ įĖ‚ŸĪ ͟†‚…
.˜Œ‚ƒ ą…ŒĮĖ

.ĖéœĶĮĖ ąé›‚éœĶéƒ ’ŸĄĶ‚— ąƒ ’ŌƒĶ ąˆ ‚ž‹Ÿ•ĶœŸĮ ˟‹Ķ„ƒ ŋĮ Ž—›› ‚‡œŸĮ ĶĖ
Ķ‚é…é•Ķ ˜Į߅’› ą—™ƒ ¬Ėœ—’› ؟͐… ĮĶ Šš— ‘ƒĮ߅ ‚žœ… ąœ Šš— ڟ П•Ķ…œŸĮ
؟͐… ĮĶ ŽĄ ĪĮ ąĖ‚•…‹Į ’Į̓ Ī‚Ÿœ ĖĶߛ ’‚žŸœĮߊĮĶ• ß…Ķ… ß ŽĄ ’ŸŒ Ė‚‡ŸĮ
’éŸéŒ ŚéŸ ‚éŸĄ ąé— ĖéĖ’› Ž‚Œœ К— ’‚ąĖœĪ‚‹ ß ‚žŒßĶ ŲŸĶ… ’˜œß˜ˆ .˜—
Ė‚‡ŸĮ ’œ‚Ÿ› ’‚’ŸŒ ‚method ‚ŸĄ ¬Ė͟˜ ĶĮĶ– ąĖ‚•…‹Į ĖĶߛ ąĶ‚ƒßĖ ĖœĮ߅Ÿ›
ŽĄ ĪĮ ąĖ‚•…‹Į ’Į̓ ŜŸš— ß Å‹Į Ī‚Ÿœ ŜŸš— ąƒ ‚žœĄ Ė‚‡ŸĮ ’Į̓ ‚Ÿ ˜œ—’›
Ķ韆‚… ą›‚œĶƒ ’ŸĮĶ‚— ̓ ܛĮߏ ޟĮ ą› ¬ĖĖ Ż‚‡œĮ ˟‚ƒ ’œĮߊĮĶ• ˜ˆ К—
.˜ĶĮ̘’›


’ŸŒ Ė‚‡ŸĮ ĶĖ Ō‚Ÿ…‰Į
ĪĮ Ń韃 Ė‚‡ŸĮ ĪĮ :ŋĮ ĶĮĶ– ޟĮ ĪĮ Į߂‡ ÅŸĶŸĖ› ’ŸĄĶ‚— ’‹‚‹Į ÜߍĮ ĪĮ ’—Ÿ
ĪĮ ’éŸéŒ Ė‚é‡éŸĮ ŻĖé ‚éƒ ą— Å‹Ÿœ ŽĄ ’‚œ› ąƒ ŽŸĮ .˟œ— įĶĮĖĖߊ ’ŸŒ ˉ
ąé— įĖ— ’Į͇Į Ż‚˜œ ˟‚ƒ ą—™ƒ ¬ĖŸœ— Ķ՜•Ķ Į͘ ’ŸŒ ’‹Ÿßœ ą›‚œĶƒ ’‚ŸĮĪ›
.ĖéŸéŒ‚éƒ ąĖĶéŒé• ’‚ą–™‰ ܊ĮĖ ’ŸŒ Ė‚‡ŸĮ ƖĮĶ› ĖĶĮĖ ’ŸĮĶ‚— ĶĖ ’›ž› іœ
¬Åé‹Į ą™ģ‹› ڟ ’ŸĮĶ‚— ą— ’Ÿ‚ž…Ÿ–ß› ĶĖ ą— Å‹Į ąœŸĪĶ„ ĶĖ–œĄ ’ŸŒ Ė‚‡ŸĮ
.˟œ— įĶĮĖĖߊ ’œ‚Ÿ› ‚Ÿ Ŗߛ ’‚ŸŒĮ įĶßĶŽĶŸ’ Ė‚‡ŸĮ ĪĮ ˟‚ƒ

’é™éĮ ‘郜› String К— ¬(text manipulation) Ž…› įĶ‚—…‹Ė ’‚ą›‚œĶƒ ĶĖ
ŚéŸ ą— Ķ‚ƒ Ķ ¬Ėœ…‹ ĶŸĢ„‚œ ͟Ÿ“… ‚String ą— ’Ÿ‚‡œĄ ĪĮ .ŋĮ ’ŸŒ Ė‚‡ŸĮ
ą›‚œĶƒ ą‡Ÿ…œ ĶĖ .Ėߌ Ė‚‡ŸĮ ĖŸĖ‡ ’ŸŒ ڟ ˟‚ƒ Ėߌ’› ą…Š‚‹ ‚Ÿ ɚĮ String
Ü‚é‰ ŽéŸĮ ‚ƒ .˜œ—’› Ƃœ…‡Į String ĪĮ ˉ ĪĮ џƒ ąĖ‚•…‹Į ĪĮ ą‚˜Ą Ž‚‹Ÿßœ
ŲĢé‰ ĖßéŠ Ėé— ĪĮ ĮĶ String ąƒ ’˜…‹ƒĮß ’…–ß ’…‰ .ŋĮ Ž—›› ͟’ ƙ’Į ޟĮ
ĪĮ ‚žœ… ‚žœĄ П•Ķ…œŸĮ ą— ĖŸœ—’› ąĖ‚•…‹Į ’‚ĖœĪ‚‹ ’Į·Į ĪĮ ƙ’Į ¬ĖŸœ—’›
ĪĮ ąĖ‚é•é…é‹Į ąéƒ Ķßéƒé‡› ş‚žœ ĶĖ ŽŸĮ̓‚œƒ .˜ߌ’› ؟͐… String Ķ՜
.˟ߌ’› String

ÅĶ‚ƒ ٟƒŌ… :܂†›
Ī‚éŸéœ MailBot .˟‹Ÿßœ’› MailBot Ż‚œ ąƒ ĶßĶ‹ ڟ ˟œ— ÓĶ• ܂†› ŽĮߜ ąƒ
’é—韜ßĶ…—™Į ŋ„ ŠĶĖĄ ‚Ÿ ܂‹ĶĮ ŹŸĶ‚… ܟƒ– ĪĮ MIME ŽĮߜ ŌßԊ ŃĪĮĖĶ„ ąƒ
ĮĶ MIME ŽĮß霏 ŌßԊ ¬Ķ‚— ’œ‚‹Ą ’Į̓ .ĖĶĮĖ Ż‚Ÿ„ Ķ ’š‚ƒ ĶĖ ‘–Įß ąĖœ…‹Ķ•
MailBot .Ėéœé—’é› ŃĪĮĖĶ„ ‚ž…Ķ‚ƒ ٟƒŌ… ’Į̓ ąĖœĪ‚‹ · ڟ ĪĮ ąĖ‚•…‹Į ‚ƒ
Óßé ĶĖ .˜—’›œ Ė‚‡ŸĮ String ’ŸŒ ڟ ŽĮߜ ś‹– Ķ ‚Ÿ ŽĮßœÖ ŌŠ Ķ ’Į̓
Åé‹Į ĶĮĶ– ą— ĮĶ ’Ÿ‚žœĮߜ ß Ėœ—Ÿ› Ķ„ įĖßĶß Ž…› ‚ƒ ĮĶ įĶ…—ĮĶ‚— Ķ•‚ƒ ڟ
ŁéŸéƒéŌé… MailBot .˜—’› ҊŒ› Ķ•‚ƒ ޟĮ ĶĖ (’ĶĮ̘ Š—ĖœŸĮ ‚ƒ ˜ߌ ŃĪĮĖĶ„
ŽéŸĮĶ郂éœéƒ ¬Ėéœé— ’› ’œĮߊĮĶ• ŽĮߜ Ԋ Ķ ŃĪĮĖĶ„ ’Į̓ ĮĶ ÅĶ‚ƒ ąĖœĖ
.˜—’› Į˟„ įĖ‚ŸĪ ş›Į ąĖœĖ ٟƒŌ… ’ŸĮĶ‚—

Öß͌ ÅĶ‚ƒ ڟ ąĖœĖ ٟƒŌ… К— ’Į̓ ؟Ž ’™ŸŠ П•Ķ…œŸĮ ڟ ĪĮ ’‚žœß›œ ‚ƒ
: ݟœ—’›

public class AwfulRegExpMatcher {
/** Create a matcher with the given regular expression and which will
* operate on the given input string */
public AwfulRegExpMatcher(String regExp, String inputText);

/** Retrieve the next match of the pattern against the input text,
returning the matched text if possible or null if not */
public String getNextMatch();
}


ąé— ’Įą›‚œĶƒ Ķ ¬Ėœ— Į˟„ ’ŸĮĶ‚— ¬ÅĶ‚ƒ ٟƒŌ… Ż…ŸĶߘ™Į К— ޟĮ ͘Į ’…‰
Žé…é› ąéƒ ąĖéœĖ ŁŸƒŌ… ’ŸŒ ą— ’Ÿ‚‡œĄ ĪĮ .˜Ÿƒ’› ą›Ō™ ˜— ąĖ‚•…‹Į ŽĄ ĪĮ
ڟ ˟‚ƒ ĮĖ…ƒĮ ˟œ— ąĖ‚•…‹Į ŽĄ ĪĮ ˟Įߊ’› ą— Ķ‚ƒ Ķ ¬Å‹Į ą…‹ƒĮß įĖßĶß
’éŸéŒ Ė‚é‡éŸĮ ĪĮ ĖéŸéĮß銒› ą— ’Ÿ‚‡œĄ ĪĮ .ĖŸĪ‚‹ƒ ĖŸĖ‡ ąĖœĖ ٟƒŌ… ’ŸŒ
ąéŌé–éœ ąĖéœĖ ŁŸƒŌ… ĪĮ ąĶ‚ƒßĖ ąĖ‚•…‹Į ’Ÿ‚œĮ߅ ¬ĖŸœ— įĶĮĖĖߊ įĶßĶŽĶŸ’
.ˋ͒› Ķ՜ ąƒ Öß͌ ’Į̓ ’ƒßŠ

ĖĖŸ› Ž‚Œœ ĮĶ ‚›Œ ąĖœĖ ٟƒŌ… ’Į̓ į͘ŸĖ Ž—›› П•Ķ…œŸĮ ¬ĶŸĪ К— ؟͐…
:ŋŸœ Ćߊ Īߜ ’™ß ˜—’› Ė‚‡ŸĮ ĮĶ ąĖœĖ ٟƒŌ… ĪĮ ˎ› ąĖ‚•…‹Į Ž‚—›Į ą—

public class BadRegExpMatcher {

public BadRegExpMatcher(String regExp);

/** Attempts to match the specified regular expression against the input
text, returning the matched text if possible or null if not */
public String match(String inputText);

/** Get the next match against the input text, or return null if no match */
public String getNextMatch();
}



ÅéŒé˜Ī‚éƒ ˜œ‚› ’™ß›› ÅĶ‚ƒ ڟ ٟƒŌ… Ķ…•ŸĶÕ Å‚—œ Ž…•Ķ˜ ąĖŸĖ‚œ ÅĶߍ ĶĖ
æĖĶĮĖ ’陂闌Į ąˆ ĶĶŽ’ƒ ĮĶ‚Õ К— ؟͐… ޟĮ ąĖŒ ąĖĮĖ ŁŸƒŌ… ’‚ž…Ķ‚ƒĶŸĪ
ÜßĮ ą‡ĶĖ ĶĖ .ĖĶĮĖ ’œĮßĮĶ• Ś‚—ŒĮ ’ŸĄĶ‚— Ķ՜ ĪĮ ’™ß .ȟ įĖĶƒĶ‚— Ķ՜ ĪĮ
ŽĖĮĖ Ž‚éŒéœ ’ĮĶéƒ Ė霗’› ŻĪ™› ĮĶ Ėߊ ąĖœœ— ’œĮߊĮĶ• ą›‚œĶƒ ąĖœĖ ٟƒŌ…
ĪĮ ĖŒß—’› MailBot .˜— Ė‚‡ŸĮ String ڟ Ėߌ ąĖĮĖ ŁŸƒŌ… ŋĮ ĶĮĶ– ą— ’œ…›
ĖéĮß銒› ą— Ėœ—’› Į˟„ ’œĮߜ ’…–ß ’™ß ¬Ėœ— įĶĮĖĖߊ String ‚ŸŒĮ Ė‚‡ŸĮ
‚éƒ ŽĖ߃ كԜ› ’Į̓ ŋĮ Ķ߃‡› ˜— ąŸĪ‡… ’™ß›› ÅĶ‚ƒ ڟ ŽĮߜ ąƒ ĮĶ ŽĄ
.˜— Ė‚‡ŸĮ String ڟ BadRegExpMatcher

BadRegExpMatcher dateMatcher = new BadRegExpMatcher(...);
while (...) {
...
String headerLine = new String(myBuffer, thisHeaderStart,
thisHeaderEnd-thisHeaderStart);
String result = dateMatcher.match(headerLine);
if (result == null) { ... }
}


MailBot Ķé˜Į ’é…é‰ ˜—’› Ė‚‡ŸĮ ĮĶ Ü‚‰ string ąĖœĖ ٟƒŌ… ¬ŻßĖ ą‡ĶĖ ĶĖ
ąĖéŒ ąĖĮĖ ŁŸƒŌ… Ž…› ąƒ ß ¬ąœ ‚Ÿ ˜—’› Ŗƒ‚Ō› ą…ŒĶ ŽŸĮ ˜Į˃ ĖĮߊƒ Ō–•
ąƒ BadRegExpMatcher ĪĮ ąĖ‚•…‹Į ’Į̓ ą— Å‹Į ŽĄ ’‚œ› ąƒ ŽŸĮ .ĖĶĮ˜ Ī‚Ÿœ
ßĖ ĖéŸ‚éƒ Ėœ—’› Ŗƒ‚Ō› ҂Рś͕ ڟ ‚ƒ ŹŸĶ‚… ŽĮߜ ڟ ą— ŽĄ ˟Ÿ‚… Ķß՜›
’éŸéŒ ßĖ ąé™‚‰ ąĖŒ ąĖĮĖ Ž…› ß ąĖœĖ ٟƒŌ… įĖßĶß ĖŸœ— Ė‚‡ŸĮ String ’ŸŒ
Ķé ŽĮߜ Ԋ Ķ ’Į̓ ˟Ķ߃‡› ͘Į ’™ß ¬Ėœ‹Ķœ Ķ՜ ąƒ ąŸƒŒ ŽĮ˜ˆ ŋĮ Ž—››
ˉ ‚… ˜Į߅’› ޟĮ ¬ĖŸœ— Ė‚‡ŸĮ ’ŸŒ ßĖ Ėœ—’› ŃĪĮĖĶ„ MailBot ą— ’…‹„ Ż‚Ÿ„
Ėß錒é›éœ ŌßéƒĶ› MailBot ’‰ĮĶŌ ąƒ Ü—Œ› ¬ĖŒ‚ƒ ĶĮ̘͟†‚… ĖĶ—™› ̓ įĖ‚ŸĪ
.ĖĶĮĖ Ō‚ƒ…ĶĮ BadRegExpMatcher К— ĪĮ ąĖ‚•…‹Į Ž‚—›Į ‚ƒ ’‰ĮĶŌ ąƒ ą—™ƒ

’‚éžéŒßĶ ĖéœĮßé…éƒ ąé— Ķé…é—ƒ‹ Match ’ŸŒ ڟ Ō˜Ī‚ƒ ą— ĖŸŒ‚ƒ ą…ŒĮĖ ą‡ß…
Ō˜Ī‚ƒ ’‚‡ ąƒ ĖĖ ŃŸ‚›œ ĮĶ getMatchString() ß getLength() ¬getOffset()
’éŸéŒ ŚéŸ Ė‚‡ŸĮ ą— ŽĄ Ėß‡ß ‚ƒ .ˌŠƒ’›œ įĖ‚ŸĪ Ė߃žƒ ĮĶ ’ŸĄĶ‚— String ڟ
ąéŸĮĶĄ ڟ Ė‚‡ŸĮ ŻĪ™…‹› Žßˆ ŋĮ String ڟ Ė‚‡ŸĮ ĪĮ Ķ…œĮĪĶĮ š‚›…‰Į Match
’ĮĶéƒ ąé— ˟œ—’› Ė‚‡ŸĮ ’œ‚Ÿ› ’ŸŒ ڟ Īߜ ¬Å‹Į ‚ąĖĮĖ ŽĖĶ— ’„— ß char[]
.ĖĶĮĖ ’›— ŃĪĶĮ ‚›Œ ŽĮߊĮĶ• ą›‚œĶƒ

’ĮĶéƒ ĖéĮߊ’› ą— ’›Ķ• ąƒ ĮĶ įĖßĶß Ėœ—’› Ķ߃‡› ĮĶ ‚›Œ BadRegExpMatcher
ĪĮ ąĖ‚é•é…é‹Į ’é™ß .Åé‹Į Ķé…éžéƒ ‚é›éŒ ’Į̓ ą—Ÿ›Ķ• ąƒ ąœ ĖŸœ— ޟ›‚… ŽĄ
ĖéŸĖž… MailBot ’ŸĄĶ‚— ’Į̓ ą— įĶԊ ¬ĖĶĮĖ Ż į͘ŸĖ ĶԊ BadRegExpMatcher
Ż‚˜œ String ĪĮ ąĖ‚•…‹Į ĪĮ įĶĮĖĖߊ ϘœĮ ޟ‹‰… Ė– ‚ƒ ‚›Œ :ŋĮ Ķ…ąĖœœ—
ŁéƒŌœ› ’Į̓ ˟Ķ߃‡› ą— ’Ÿ‚‡œĄ ĪĮ ’™ß .˟œ—’› Öß͌ ą›‚œ ’‚žœĮߜ ŃĪĮĖĶ„
ą‹ß‹ß ŋĮ Ž—›› ¬ĖŸœ— Ė‚‡ŸĮ įĖ‚ŸĪ String ’‚ŸŒĮ BadRegExpMatcher ‚ƒ ŽĖ߃
Žß霗Į .˟œ— ąĖ‚•…‹Į Ķ…ŒŸƒ ’…‰ String ĪĮ ß ĖŸĶĮ̘ Ķ‚œ— ĮĶ Ėߊ ŲĖ ˟ߌ
ĶéŸé†‚é… Å鉅 ˜—’› ąĖ‚•…‹Į ŽĄ ĪĮ ą— ĮĶ ’Įą›‚œĶƒ ąĖœĪ‚‹ · ڟ ˃ ’‰ĮĶŌ
ĮĶ ‚雌 ą— ĖŸœ— Į˟„ įĶ…žƒ ÅĶ‚ƒ ąĖœĪ‚‹ · Įːƒ ͘Į ’…‰ .ŋĮ ąĖĮĖ ĶĮĶ–
ąĖéŸĖ ĆéŸé‹Ą ą›‚œĶƒ ܗ ŋĮ Ž—›› Ž‚›Ī ŽĄ ‚… ¬Ėœ—œ String ޟ›‚… ąƒ Ķ߃‡›
.ˌ‚ƒ


Ķ…žƒ П•Ķ…œŸĮ ڟ
ŃéŸé„ ’™—Œ› ޟœˆ ą— ’߉œ ąƒ ĖĶ— ؟͐… ĮĶ BadRegExpMatcher ŽĮ߅’› ąœß˜ˆ
ĮĶ ĖßéŠ įĖßĶß Åé›Ķé• Ė霗 ’‹ ˟‚ƒ BadRegExpMatcher ÜßĮ ą‡ĶĖ ĶĖ æĖŸ‚Ÿœ
Ėéœé—’é› ŽéŸé›‚é… ŽĄ ŽĮßéŠĮĶ• ą— ’…›Ķ• Ķ ąƒ ĮĶ įĖßĶß ĖŸ‚ƒ .˜—œ ܟ›‰…
.Ė霗 Ė‚‡ŸĮ String ڟ Ķ‚—Ėߊ Ķßԃ ٟƒŌ… ’Į̓ ˟‚ƒœ ːƒ ą‡ĶĖ ĶĖ .ĖĶŸĢ„ƒ
Ė‚é‡éŸĮ ĮĶ ŽĄ ĖéœĮß酃 ŽĮߊĮĶ• ˌ ŻĪš ͘Į ‚… ˜ĮĖ̓͘ ’•‚— łšŌĮ ˟‚ƒ
ĪĮ ąĖ‚•…‹Į ’™ß ¬Ėœ— ޟ›‚… Ķ‚— ޟĮ Ż‚‡œĮ ’Į̓ ’ŒßĶ ĖœĮ߅’› ޟœˆ›) .˜—
:ݟœ—’› ’•͐› ĮĶ Ķ…žƒ П•Ķ…œŸĮ ڟ ‚‡œŸĮ ĶĖ (.ˌ‚ƒ įĶ‚ƒ‡Į ˟‚ƒœ ŽĄ

class BetterRegExpMatcher {
public BetterRegExpMatcher(...);

/** Provide matchers for multiple formats of input -- String,
character array, and subset of character array. Return -1 if no
match was made; return offset of match start if a match was
made. */
public int match(String inputText);
public int match(char[] inputText);
public int match(char[] inputText, int offset, int length);

/** Get the next match against the input text, if any */
public int getNextMatch();

/** If a match was made, returns the length of the match; between
the offset and the length, the caller should be able to
reconstruct the match text from the offset and length */
public int getMatchLength();

/** Convenience routine to get the match string, in the event the
caller happens to wants a String */
public String getMatchText();
}


ŁéŸéƒéŌé… Ćߙԛ ś͕ ąƒ įĖßĶß Ž…› ܟ˃… ąƒ ŽĮߊĮĶ• ŻĮĪ™Į ĖŸĖ‡ П•Ķ…œŸĮ
ĶéŸĪ Üé—éŒ ąéƒ ĮĶ match() ĖéœĮßé…’› Žßœ—Į MailBot .ĖĖ’› ѝ‚— ĮĶ ąĖœĖ
:˜— ’œĮߊĮĶ•

int resultOffset = dateMatcher.match(myBuffer, thisHeaderStart,
thisHeaderEnd-thisHeaderStart);
if (resultOffset < 0) { ... }


ŽĮß霏 ąƒ .˃‚Ÿ’› Ł–‰… ĖŸĖ‡ ’‚ŸŒĮ Ė‚‡ŸĮ Žß˃ Ķ՜ ĖĶߛ ŲĖ ß…Ķ… ޟĮ ąƒ
’é‰ĮĶéŌ ąé•é‹é™é• ąéƒ ŽĄ ŠéŸé•Ķé…éœéŸĮ ’é‰ĮĶéŌ Śéƒ‹ ¬ąĖŒ ą•‚ŽĮ ś͕ ڟ
.˜‚›’› ˜ƒŸ‚„ Į߂‡ lots-of-simple-methods

match() Ōé‹ß… ąĖŒ Ż‚‡œĮ Ķ‚— ŽĮΟ› ąƒ ’•‚ŽĮ ’ŸŒ Ė‚‡ŸĮ ĖĶ—™› ٟ–Ė ͟†‚…
ßĖ do-nothing ’‚éžéŸĪ‚‹ ąĖ‚Ÿ„ į˜ƒœ‚›Ī ß Ė‚‡ŸĮ ‚ƒ ˟œĮ߅’› .ĖĶĮĖ ’˜…‹ƒ
‚éƒ .ĖéŸéœé— ŽéŸéŸ… š‚ƒ ˉ ڟ ’ŸĄĶ‚— Ų‚—Œ ’Į̓ ¬ÅĶ‚ƒ ąĖœĖ ٟƒŌ… К—
’é˜é…éŠ‚é‹ Ššé— ‚éƒ Łßé• ’‚éąé›‚éœĶéƒ ąééŌé– Sun JDK 1.3 ĪĮ ąĖ‚é•…‹Į
’阅Š‚‹ К— ‚ƒ ‚… ˜ߌ’› Į͇Į Ķ…ŸĶ‹ Ķ‚ƒ µ° ‚ƒĶ–… BetterRegExpMatcher
ŁéŸéƒéŌ… ĪĮ ‚žœ… ą— ąĖ‚‹ įĪ‚‹ ąĖ‚Ÿ„ ڟ ĪĮ ąĖ‚•…‹Į ‚ƒ .BadRegExpMatcher
ĪĮ Ķ…ŸĶ‹ Ķ‚ƒ ǜ„ ˜Į߅’› BetterRegExpMatcher ¬Ėœ—’› ’œ‚ƒŸ…Œ„ ą…ŒĶ ĶŸĪ
.Ėߌ Į͇Į Ėߊ BadRegExpMatcher ’‚…›

ą™Ė‚ƒ› ÖĮߜĮ
ąéŸĮĶĄ ĪĮ įĖßĶß Žé…é› ĖĶé— ĶĮĖĮß ĮĶ MailBot ŽĮßéŠĮĶé• BadRegExpMatcher
įĶßĶéŽĶŸ’ ’ŸŒ ڟ ą‡Ÿ…œ ĶĖ ¬Ėœ— ܟ˃… String ڟ ąƒ ÅŒĮĖ šƒ– ą— įĶ…—ĮĶ‚—
’ĮĶéƒ BadRegExpMatcher ’‚éžéŸĪ‚‹ ąĖ‚Ÿ„ ĪĮ įĶ‚Ÿ‹ƒ ą— ŽŸĮ ߇ .ˌ Ė‚‡ŸĮ
ÜéŸĖéƒé… įĶ…—ĮĶ‚— ڟ ąƒ ą™‚•šƒ ĮĶ String ŽĄ ¬įĖßĶß Ž…› ąƒ Ž‚‹Ą ’‹Ķ…‹Ė
ŋĮ ŽĄ ’‚œ› ąƒ ą—™ƒ ¬ĖĖ’› ҟŠ… ĮĶ į͘ŸĖ ’ŸŒ ‚žœ… ąœ Ķ‚— ޟĮ .˜œ—’›
ŽĄ ‚ƒ ÜßĮ ą— ĖŸ‹Ķƒ ’ŒŸ‚›œ Ž‚› ąƒ ‚… ˟ĮąĖĮĖ Ż‚‡œĮ ĮĶ ‚Ķ‚— ޟĮ ą› ą—
ŚéŸ ‚ƒ ˜…‹Įߊ’›œ ŻĮĖ—ˆŸ BadRegExpMatcher ąœ ß MailBot ąœ .˟ĖĶ— Öß͌
’ĮĪé‡Į ŽéŸƒ Ž…› ą™Ė‚ƒ› ’Į̓ ’Ō– ś͕ String ˜Œ‚ƒ ą…ŒĮĖ Ķ‚—ßĶ‹ String
.˟‹Ķ’› Ķ՜ ąƒ ąĖœĪ‚‹

Üé›é ąé™Ė‚ƒ› Öߜ ڟ ŽĮߜ ąƒ String К— ¬Łß• BadRegExpMatcher ܂†› ĶĖ
‚靱ĖĮĖ ąĖéœßŒ ’œĮߊĮĶ• ąœ ß ąĖœœ— ’œĮߊĮĶ• ąœ ą™Ė‚ƒ› Öߜ ڟ ĶĖ .˜—’›
ĪĮ ‚Ÿ ąƒ ’œ‚‹Ą ąƒ ĖœœĮ߅’› ßĖ Ķ ’™ß ¬ĖœĮߊ’›œ ß ĖœĶĮ˜ ś͕ ŽĄ ąƒ ĮĶ
’é˜ĖéŸéˆéŸ„ ą™Ė‚ƒ› Öߜ ڟ Ķ՜ ĪĮ П•Ķ…œŸĮ ڟ ؟͐… .˜ߌ ܟ˃… ś͕ ŽĄ
ąéƒ ’é˜Ė‚‹ ޟĮ ’‚˜ ’™ß ¬ĖĖ’› ѝ‚— ŽĄ įĶŸĢ„ ؂ԐœĮ Օ‰ ‚ƒ ĮĶ ŠŸ•Ķ…œŸĮ
.Ėߌ’› Ż‚›… ’ŸĮĶ‚— ѝ‚— śŸ–


ڟ ą— Å‹Į Ž—›› ͟’ .ŋĮ JDBC ResultSet П•Ķ…œŸĮ ą™Ė‚ƒ› Öߜ ĪĮ ąœß›œ ڟ
ResultSet П•Ķ…œŸĮ ڟ ŽĮߜ ąƒ ĮĶ Ėߊ ǟ‚…œ ’…‚šŌĮ ڜ‚ƒ ’™‰› П•Ķ…œŸĮ
ąĖéŒ ąéģĮĶĮ ’é™é‰é› Ń韂›œ ’œ‚‹Ą ąƒ ĖœĮ߅’› JDBC ĶߟĮĶĖ ’™ß ¬Ėœ— ąģĮĶĮ
ĆéŸé…Ķé… Ž›Ÿ ąƒ .˜‚Œß„ƒ ResultSet ’Į͇Į ڟ ‚ƒ ĮĶ ’…‚šŌĮ ڜ‚ƒ ą™Ÿ‹ßƒ
‚é›éŒ ’é™ß ¬ĖĖ’›œ џ‚›œ ܗŒ ޟĮ ąƒ ĮĶ ąĖĮĖ ’‚ĖĶß—Ķ ’…œŸš— ą›‚œĶƒ ȟ
ܟ˃… Ćߙԛ џ‚›œ ąƒ ResultSet ڟ ĪĮ įĶĮßŒĖ ŽŸĶ…›— ‚ƒ ĮĶ ‚žœĄ ˟œĮ߅’›
‚éƒ Ī‚Ÿ…›Į ‚ƒ Žßˆ ĖŸĶŸĢ„’› ĮĶ Åƒ‚† ąœŸĪ ĪĮ ÉŌ‹ ޟĮ JDBC ĖĶߛ ĶĖ .˟œ—
‚ƒ .ŋĮ ąĮĶ› ’…‚šŌĮ ’‚ž—œ‚ƒ ޟƒ ’Ÿ‚‡ƒ‚‡ ş™ƒ‚– ß įĪ‚‹ ĖĶĮ˜‚…‹Į ŃĪĶĮ
Ėéœéœé— ܟ›‰… ˜œĮ߅Ÿ› ą™Ė‚ƒ› ÖĮߜĮ ą— įĖĶ—™› ’‚ ąœŸĪ ƖĮĶ› ܂‰ ޟĮ
.˟Œ‚ƒ

Ķé՜ ĪĮ String ĪĮ ąĖ‚•…‹Į ‚ƒ ‚žœ… П•Ķ…œŸĮ ؟͐… RegExpMatcher ĖĶߛ ĶĖ
ąéƒ Ķ‚é— ŽŸĮ .ŌĮ˜ ’œĮ˜ˆ ą‡Ÿ…œ Ķ…ŒŸƒ ’Ÿ‚‡ƒŸ‚‡ ş™ƒ‚– ‚Ÿ Ķ…›— ’˜ĖŸˆŸ„
Ż‚é˜éœé .Ėé‹Ķ’›œ Ķ՜ ąƒ ’™ß–› ąœĪĮߛ ޟĮ̓‚œƒ ß ¬ĖŒ Ż‚›… ’ŸĮĶ‚— śŸ–
ąé‹ßé‹ß Ćé™é’Į ą™Ė‚ƒ› ÖĮߜĮ ĪĮ ąĖ‚•…‹Į ¬ąĖœĪ‚‹ ’Į·Į ’‚ž‹Ÿ•Ķ…œŸĮ ’‰ĮĶŌ
Ė韂ƒ Īߜ ’™ß ¬Ė‹Ķƒ Ķ՜ ąƒ "Ķ…ĪŸ›…" П•Ķ…œŸĮ Ėߌ’› ʏ‚ƒ Žßˆ ¬Å‹Į Ο›Ą
ĖĶßé› Ėéœéœ‚é› ’é‚é˜ ĖéŸéœé—’é› ĶĮĶé–Ķéƒ ’é™ß–› ąœĪĮߛ ą— ĖŸßŒ Žģ›Ō›
’éœĮߊĮĶ• ’‚ą›‚œĶƒ ą— ĖœĶĮĖ Ėß‡ß ’‡ß͊ ‚Ÿ įĖßĶß ’‚ž…›Ķ• RegExpMatcher
‚éŸĄ ąé— ĖéŸéœ— ’‹Ķ̓ .˜œ—’› ąĖ‚•…‹Į ‚žœĄ ĪĮ Ė‚ŸĪ ܂›…‰Į ąƒ ‚›Œ ąĖœœ—
.˟œ— ޟ›‚… ’œ‚‹Ą ąƒ ĪŸœ ĮĶ ‚žœĄ ˟œĮ߅’›

ą™Ė‚ƒ› ÖĮߜĮ ĪĮ ąĖ‚•…‹Į ĖĶ—™› ͟†‚… į͟˜ ąĪĮ˜Į ą— Å‹Į įĶßĄĖ‚Ÿ ąƒ ŻĪš
Ž‚›Ī ˜—’› ’œĮߊ ĮĶ• ĮĶ BadRegExpMatcher ą— Łß• ą›‚œĶƒ ąŌ– .ŋŸœ Ž‚‹Ą
ŽĄ Ü‚é‰ ŽéŸĮ ‚éƒ .ĖéĖ’› Ņ‚…ŠĮ MailBot ąƒ ĮĶ įĖßĶß String Ė‚‡ŸĮ ’Į͇Į
.ˌ Ė‚‡ŸĮ BadRegExpMatcher ޟ›‚… ‚žœ… String

˟œ— ’ƒ‚ŸĪĶĮ ą›‚œĶƒ ĖĶ—™› ’Į̓ ĮĶ ąĖœĪ‚‹ · ڟ ’–Įß Ķ†Į ˟Įߊ’› ͘Į
įĖ— ß ĖĖ’› Ż‚‡œĮ ĮĶ ’œĮߊĮĶ• ą— ĮĶ įĖ— ˟‚ƒ ŽĄ Ė— ‘ƒœ› ĖĶƒĶ‚— ̓ ąßš
’‚éĶĮĪéƒĮ ‚éƒ Ķ‚é— ŽéŸĮ Ż‚‡œĮ .˟œ— ’‹Ķ̓ ĖĖ͘’› ̓ ’œĮߊĮĶ• ĪĮ ą— ĮĶ
.ŋĮ ܗŒ› ĖĶĮ˜‚…‹Į Profling



ą‡Ÿ…œ
’ŸĄĶ‚— Ś—Œ› ‚ą›‚œĶƒ ą› ß ¬ĖœĶĮ˜ ’ŸĄĶ‚— ̓ įĖ‚ŸĪ ͟†‚… ‚ą›‚œĶƒ ą›
ÉĶŌ› ܟ‚‹› ˜ĶĮĖ Ü—Œ› Ķ՜ ޟĮ ĪĮ ą— ’Ÿ‚ą›‚œĶƒ ’Į̓ ܂‰ ޟĮ ‚ƒ .˜ĶĮ˜
Ššé— ŚéŸ П•Ķ…œŸĮ ͟Ÿ“… ą— ’Ÿ‚‡œĄ ĪĮ ¬Ėœ…‹ ą‡ß… ܃‚– ą™‚–› ޟĮ ĶĖ ąĖŒ
ąé™‰Ķ› ĶĖ ĖŸ‚ƒ ¬Å‹Į ĶĮßŒĖ Ėœ—’› ąĖ‚•…‹Į ŽĄ ĪĮ ą— ’Įą›‚œĶƒ Ž…Œßœ ĪĮ ːƒ
.ĖĶ— К— ’‚ž‹Ÿ•Ķ…œŸĮ ĖĶ—™› ’‚ąŠŒ› ’‹Ķƒ ŲĶ įĶ…ŒŸƒ Å–ß ’‰ĮĶŌ

’Į̓ įĶŸĢ„‚œ ͟Ÿ“… ß įĶŸĢ„ ͟Ÿ“… į͟˜Ķ‚—ƒ ’‚žĮĶ ą™‚–› ޟĮ ŻßĖ Å›‹– ĶĖ
. ݟœ—’› ’‹Ķ̓ ĮĶ įĶßĶŽĶŸ’ ’ŸŒ Ė‚‡ŸĮ ѝ‚—





’‡œ‹Ķ՜
ޟĮ ĖĶߛ ĶĖ ĮĶ Ėߊ Ķ՜
:˟Ÿß˜ƒ ‚› ąƒ Ć™Ō›

ŃĪĶĮ ‚ƒ ’™ŸŠ -
ŃĪĶĮ ‚ƒ -
ŃĪĶĮ’ƒ -

’œ šßŌ ’™ŸŠ -
Ƌ‚œ› -
ą‚…ß— -

’Š… ’™ŸŠ -
Ćߙԛ -
ŋŸœ ’Š… ’•‚— ąĪĮ˜Į ąƒ -


:Ż‚œ

:ڟœßĶ…—™Į ŋ„

: Å—ĶŒ Ż‚œ








Copyright 2001, PC WORLD Iran/ . All rights reserved.