Regex و JSON
Regex و JSON أدوات شائعة لمعالجة البيانات. في هذا الدرس، سنتعلم استخدامها في Java.
التعبيرات النمطية (Regex)
تُستخدم للمطابقة والبحث واستبدال النصوص.
الصيغة الأساسية
| الصيغة | الوصف | مثال |
|---|---|---|
. |
أي حرف | a.c يطابق "abc" |
\d |
رقم | \d+ يطابق "123" |
\w |
حرف كلمة | \w+ يطابق "hello_123" |
\s |
مسافة | \s+ يطابق مسافات/tabs |
^ |
بداية | ^Hello يطابق البداية |
$ |
نهاية | World$ يطابق النهاية |
* |
0 أو أكثر | ab*c يطابق "ac"، "abc" |
+ |
1 أو أكثر | ab+c يطابق "abc"، "abbc" |
? |
0 أو 1 | ab?c يطابق "ac"، "abc" |
{n} |
n مرات | a{3} يطابق "aaa" |
{n,m} |
من n إلى m | a{2,4} يطابق "aa"، "aaa" |
[] |
مجموعة أحرف | [abc] يطابق "a"، "b"، "c" |
| |
أو | cat|dog يطابق "cat" أو "dog" |
() |
مجموعة | (ab)+ يطابق "ab"، "abab" |
Pattern و Matcher
JAVA
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexDemo {
public static void main(String[] args) {
String text = "بريدي الإلكتروني هو test@example.com، رقمي 0501234567";
// مطابقة البريد
Pattern emailPattern = Pattern.compile("\\w+@\\w+\\.\\w+");
Matcher emailMatcher = emailPattern.matcher(text);
if (emailMatcher.find()) {
System.out.println("البريد: " + emailMatcher.group());
}
// مطابقة رقم الهاتف
Pattern phonePattern = Pattern.compile("0[5]\\d{8}");
Matcher phoneMatcher = phonePattern.matcher(text);
if (phoneMatcher.find()) {
System.out.println("الهاتف: " + phoneMatcher.group());
}
}
}
الدوال الشائعة
JAVA
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexMethods {
public static void main(String[] args) {
String text = "مرحباً 123 عالم 456";
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(text);
// find(): إيجاد المطابقة التالية
while (matcher.find()) {
System.out.println("وجد: " + matcher.group());
System.out.println("الموضع: " + matcher.start() + "-" + matcher.end());
}
// matches(): مطابقة كاملة
System.out.println(Pattern.matches("\\d+", "123")); // true
System.out.println(Pattern.matches("\\d+", "123a")); // false
// split(): تقسيم
String[] parts = "a,b,c".split(",");
for (String part : parts) {
System.out.println(part);
}
// replaceAll(): استبدال الكل
String result = "مرحباً 123 عالم".replaceAll("\\d+", "***");
System.out.println(result); // مرحباً *** عالم
}
}
مثال: أنماط Regex شائعة
JAVA
public class CommonRegex {
public static void main(String[] args) {
// التحقق من البريد
String emailRegex = "^[\\w.-]+@[\\w.-]+\\.\\w+$";
System.out.println(Pattern.matches(emailRegex, "test@example.com")); // true
// التحقق من الهاتف
String phoneRegex = "^0[5]\\d{8}$";
System.out.println(Pattern.matches(phoneRegex, "0501234567")); // true
// التحقق من IP
String ipRegex = "^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\د\\د?)$";
System.out.println(Pattern.matches(ipRegex, "192.168.1.1")); // true
}
}
التقاط المجموعات
JAVA
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class GroupDemo {
public static void main(String[] args) {
String text = "2026-06-25";
Pattern pattern = Pattern.compile("(\\د{4})-(\\د{2})-(\\د{2})");
Matcher matcher = pattern.matcher(text);
if (matcher.matches()) {
System.out.println("التاريخ الكامل: " + matcher.group(0)); // 2026-06-25
System.out.println("السنة: " + matcher.group(1)); // 2026
System.out.println("الشهر: " + matcher.group(2)); // 06
System.out.println("اليوم: " + matcher.group(3)); // 25
}
}
}
معالجة JSON
JSON هو صيغة خفيفة لتبادل البيانات.
تحليل JSON يدويًا
JAVA
public class JsonParseDemo {
public static void main(String[] args) {
String json = "{\"name\":\"أحمد\",\"age\":25,\"city\":\"الرياض\"}";
// تحليل بسيط (غير موصى به، استخدم مكتبة في المشاريع الحقيقية)
json = json.replace("{", "").replace("}", "").replace("\"", "");
String[] pairs = json.split(",");
for (String pair : pairs) {
String[] kv = pair.split(":");
System.out.println(kv[0].trim() + " = " + kv[1].trim());
}
}
}
استخدام مكتبة JSON (Jackson)
JAVA
// بعد إضافة تبعية Jackson
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonDemo {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
// كائن إلى JSON
User user = new User("أحمد", 25، "الرياض");
String json = mapper.writeValueAsString(user);
System.out.println("JSON: " + json);
// {"name":"أحمد","age":25,"city":"الرياض"}
// JSON إلى كائن
User parsed = mapper.readValue(json, User.class);
System.out.println("الكائن: " + parsed);
}
}
class User {
private String name;
private int age;
private String city;
public User() {} // Jackson يتطلب مُنشئ بدون معاملات
public User(String name, int age, String city) {
this.name = name;
this.age = age;
this.city = city;
}
// Getters/Setters
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getCity() { return city; }
public void setCity(String city) { this.city = city; }
@Override
public String toString() {
return "User{name='" + name + "', age=" + age + ", city='" + city + "'}";
}
}
مصفوفات JSON
JAVA
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
public class JsonArrayDemo {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
// مصفوفة JSON
String json = "[{\"name\":\"أحمد\",\"age\":25},{\"name\":\"محمد\",\"age\":30}]";
// تحليل إلى List
List<User> users = mapper.readValue(json, new TypeReference<List<User>>() {});
users.forEach(System.out::println);
// List إلى JSON
String result = mapper.writeValueAsString(users);
System.out.println(result);
}
}
عمليات JSON شائعة
JAVA
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonNodeDemo {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
String json = "{\"name\":\"أحمد\",\"age\":25,\"address\":{\"city\":\"الرياض\",\"zip\":\"12345\"}}";
// تحليل إلى JsonNode
JsonNode node = mapper.readTree(json);
// الحصول على القيم
System.out.println("الاسم: " + node.get("name").asText());
System.out.println("العمر: " + node.get("age").asInt());
System.out.println("المدينة: " + node.get("address").get("city").asText());
// التحقق من الوجود
System.out.println("يوجد بريد: " + node.has("email"));
}
}
دوال Regex للنصوص
JAVA
public class StringRegex {
public static void main(String[] args) {
String text = "مرحباً 123 عالم 456";
// matches(): مطابقة كاملة
System.out.println("123".matches("\\d+")); // true
// replaceAll(): استبدال جميع المطابقات
String result = text.replaceAll("\\d+", "***");
System.out.println(result); // مرحباً * عالم *
// replaceFirst(): استبدال أول مطابقة
String result2 = text.replaceFirst("\\d+", "***");
System.out.println(result2); // مرحباً *** عالم 456
// split(): تقسيم
String[] parts = "a,b,,c".split(","); // يحتفظ بالنصوص الفارغة
System.out.println(parts.length); // 4
}
}
❓ أسئلة شائعة
س Regex صعبة التذكر — ماذا أفعل؟
ج تذكر الأنماط الشائعة: \d \w \s . * + ? [] (). للأنماط المعقدة، راجع التوثيق.
س أي مكتبة JSON أستخدم في Java؟
ج Jackson هي الأكثر شعبية. Gson أيضًا جيدة. للسيناريوهات البسيطة، التحليل اليدوي يعمل.
س كيف أداء regex؟
ج ال.regex البسيطة أداءها جيد. المعقدة قد تكون هناك مشاكل في الأداء. تجنب الكثير من التراجع.
📖 ملخص
- Regex تُستخدم لمطابقة النصوص والبحث والاستبدال
- Pattern و Matcher هما الفئات الأساسية لـ regex في Java
- JSON هو صيغة خفيفة لتبادل البيانات
- Jackson هي مكتبة JSON الأكثر شعبية في Java
📝 تمارين
- تحقق من البريد: اكتب دالة تتحقق من صيغة البريد
- استخراج: استخرج جميع الروابط من HTML
- تحليل JSON: حلل نص JSON واستخرج حقولًا محددة
الدرس التالي
في الدرس التالي، سنتعلم مشروع شامل — بناء مشروع Java كامل.



