Regular Expressions

ერთ-ერთი პატარა პრობლემა, რომელზეც რამდენიმე კვირის წინ დავკარგე დრო, რეგულარულ გამოსახულებებს ეხებოდა. კერძოდ კი, როგორც ჯავაში ვიყენებდი მათ, ისე მინდოდა დამეწერა php-ზე ფილტრისთვის.
არ იმუშავა. მაგალითისთვის მარტივი გამოსახულება ავიღოთ.
ვთქვათ, მინდა რომ სტრიქონი შეიცავდეს მხოლოდ ლათინურ ასოებს.
ჯავაში იქნებოდა ასე:

String regex="[a-zA-Z]+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("StringToMatch");
System.out.println(matcher.matches());

იგივე გადავიტანე მეორე ენაზე.

$regex="/[a-zA-Z]/";
echo preg_match($regex,'StringToMatch');

მაგრამ ეს პატერნი ერგებოდა როგორც მაგალითად StringToMatch სტრიქონს, ისე asdf1234. asdf45fg67-საც.. და საერთოდ neb1$mier_texts.

საქმე იმაშია, რომ preg_match ფუნქცია აბრუნებს 1-ს იმ შემთხვევაშიც, თუ ერთხელ მაინც შეხვდა სადმე პატერნის შესაბამისი ტექსტი. თუ გვინდა რომ მთელს სტრიქონზე იმუშაოს, მაშინ უნდა ჩავამატოთ დასაწყისის (^) და დასასრულის ($) აღმნიშვნელი სიმბოლოები. ანუ გამოსახულებას უნდა ჰქონდეს სახე:
$regex="/^[a-zA-Z]$/";

დოკუმენტაციის წაკითხვა უნდოდა დაკვირვებით… :blush2:

ობიექტების შედარება (Java)

ვიცით, რომ ობიექტების შედარებისას არის რამდენიმე ვარიანტი:

== შედარების ოპერატორის საშუალებით ვადგენთ მიუთითებენ (refer) თუ არა მითითებები ერთსა და იმავე ობიექტზე;

equals() მეთოდი – ვადგენთ აზრობრივად არის ორი ობიექტი ერთმანეთის ტოლი თუ არა.

 

რა ხდება wrapper კლასების შემთხვევაში? თავიდან ცოტა უცნაურად მომეჩვენა…

ასეთი კითხვა:
 

Integer i1 = 1000;
Integer i2 = 1000; 

if (i1 != i2) System.out.println("Different objects");
if (i1.equals(i2)) System.out.println("Meaningfully equal");

 

კოდის გაშვების შედეგად ვიღებთ:
 

Different objects
Meaningfully equal 

რა შედეგი ექნება ამ კოდს?

Integer i1 = 10;
Integer i2 = 10;

if (i1 == i2) System.out.println("Same objects");
if (i1.equals(i2)) System.out.println("Meaningfully equal");