استخراج الأسطر المطابقة لتعبير نمطي من النصوص والسجلات
في سجل يضم أسطر INFO وWARN وERROR، يُبقي التعبير ^ERROR\b سطري الخطأ فقط من أصل 4، دون تغيير وبالترتيب. يُفحص كل سطر وحده، فلا يمتد الرمز الشامل إلى السطر التالي أبدًا. مجانية في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- النمط
- ^ERROR\b
- النتيجة
- ERROR database unavailable ERROR request timed out
- عدد التطابقات
- 2
- إجمالي الأسطر
- 4
استخرجوا الأسطر المطابقة لتعبير نمطي عندما يحتوي سجل طويل أو تقرير أو تفريغ إعدادات أو نص منظم على معلومات أكثر بكثير مما تحتاجون إليه. قدّموا النص ونمط JavaScript والرايات الاختيارية؛ فتفحص القدرة كل سطر كامل وتعيد الأسطر المطابقة وحدها بترتيبها الأصلي. وهي تقبل نهايات الأسطر LF وCRLF وCR، وتحافظ على محتوى الأسطر المحددة، وتعرض عدد المطابقات وإجمالي الأسطر المفحوصة. تتم المعالجة محليًا وبصورة حتمية، من دون نموذج أو اتصال بالشبكة.
اكتبوا نمطًا يحدد الأسطر المطلوبة بدقة
يُطبّق النمط على كل سطر كامل بصورة مستقلة، ولذلك تكون مراسي البداية والنهاية مفيدة جدًا. ابدأوا باستخدام ^ حين يجب أن يظهر العنصر المهم في بداية السطر، واختموا باستخدام $ حين تكون الأحرف الأخيرة هي المهمة. فمثلًا يختار ^ERROR\b سجلات الخطأ المعتادة من دون قبول تسمية مثل ERRORS، بينما يحتفظ \.csv$ بأسماء الملفات التي تنتهي بهذا الامتداد.
قدّموا مصدر التعبير النمطي لا صيغة الشرطتين المائلتين؛ أي اكتبوا ^WARN لا /^WARN/. تُرسل رايات JavaScript الاختيارية في حقل منفصل. تجعل الراية i المطابقة غير حساسة لحالة الأحرف، وتحتفظ الرايات الأخرى المدعومة بمعانيها القياسية في JavaScript.
يُعاد كل سطر محدد من دون تغيير وفي موضعه النسبي الأصلي. تختفي الأسطر غير المطابقة، لكن الأداة لا تقتطع المسافات ولا تعيد الكتابة أو الترتيب أو إزالة التكرار أو تفسير المحتوى. وهذا العقد المحدد ملائم للأتمتة لأنه ينتج مجموعة فرعية يمكن توقعها من المصدر، لا ملخصًا قد يحذف دليلًا مهمًا.
صفّوا السجلات والنصوص المنظمة من دون تغيير الأدلة
يناسب الترشيح بحسب الأسطر سجلات التطبيقات ومخرجات الأوامر والصادرات المحددة بتقسيمات وتقارير الاختبارات وملفات الإعداد. يستطيع فريق الدعم عزل معرفات الطلب ورموز الحالة ودرجات الخطورة قبل إرفاق مقتطف موجز بحادثة. ويستطيع المطور الاحتفاظ بالتوكيدات الفاشلة من تشغيل اختبار طويل.
كما يمكن لمسار عمليات أن يختار السجلات التي تتبع طوابعها الزمنية أو أسماء مضيفيها أو بادئات مكوناتها اصطلاحًا معروفًا. ولأن المطابقة تجري على سطر واحد كل مرة، فلا يمتد حرف بدل إلى السجل التالي بغير قصد. تتعرف الأداة على حدود LF وCRLF في Windows وCR المنفرد، ويستخدم النص المعاد فواصل LF ثابتة كي تتسق المقارنات اللاحقة عبر المنصات.
يمكن تحديد الأسطر الفارغة عمدًا بالنمط ^$. وتُعامل نهاية السطر الأخيرة على أنها فاصل لا سجل فارغ إضافي. وإلى جانب النتيجة المجمعة، تتضمن الاستجابة مصفوفة الأسطر المحددة وعدد المطابقات وإجمالي الأسطر، مما يمنح البرامج بيانات وفحوصًا جاهزة من دون مرحلة تحليل أخرى.
تحققوا من الأنماط وأدمجوا النتائج بأمان
ترفض القدرة النص المفقود أو الفارغ، والنمط المفقود أو الفارغ، والرايات غير المدعومة أو المكررة، وأوضاع Unicode غير المتوافقة، والتعبيرات التي يعجز محرك JavaScript عن تصريفها. وتظل الاستجابة الناجحة بلا مطابقات مفيدة؛ إذ تحتوي على نتيجة فارغة ومصفوفة أسطر فارغة وعدد مطابقات يساوي صفرًا وعدد الأسطر التي فُحصت. توجد حدود لحجم النص والنمط حتى يظل استهلاك الذاكرة متوقعًا في عامل الحافة وفي التنفيذ المجاني بالمتصفح.
عند بناء مسار آلي، اختبروا كل تعبير جديد على عينات ممثلة، واستخدموا المراسي حين يسمح التنسيق، وتجنبوا التكرارات المتداخلة الملتبسة من دون حاجة. لا تستخدم الخوارزمية شبكة أو عشوائية أو ساعة أو نموذجًا لغويًا، لذلك تنتج المدخلات المتطابقة مخرجات متطابقة.
حالات الاستخدام
عزل إدخالات الأخطاء
احتفظوا فقط بالأسطر التي تبدأ بدرجة خطأ أو تحتوي على معرف طلب معين قبل مراجعة الحادثة.
اختيار السجلات المنظمة
استخرجوا الأسطر التي تطابق بادئاتها أو حالاتها أو أسماء ملفاتها أو معرفاتها تعبيرًا نمطيًا دقيقًا.
تقليص مخرجات الاختبارات
احتفظوا بالتوكيدات الفاشلة وعلامات التشخيص من سجل بناء طويل مع صون ترتيبها الأصلي.
الأسئلة الشائعة
هل يجب وضع شرطتين مائلتين حول التعبير النمطي؟
لا. أرسلوا مصدر النمط فقط، مثل ^ERROR\b، وضعوا الرايات مثل i في حقل الرايات المنفصل.
هل يُطبّق النمط على كل سطر أم على النص كاملًا؟
يُطبّق بصورة مستقلة على كل سطر كامل. يُعاد السطر مرة واحدة إذا طابق التعبير أي موضع فيه.
هل تتغير الأسطر المطابقة؟
لا. تبقى الأحرف والترتيب كما هما، ولا تُوحّد إلى LF إلا فواصل الأسطر في النتيجة المجمعة.
ما التكلفة؟
ويمكنكم تشغيل الترشيح الحتمي نفسه مجانًا في المتصفح.
كيف أتجاهل الفرق بين الأحرف الكبيرة والصغيرة؟
أضف الخيار i الذي يُكتب منفصلًا عن التعبير. وبه يُبقي ^error أيضًا الأسطر التي تبدأ بـ ERROR أو Error. وتحتفظ الخيارات المعتادة الأخرى للتعابير النمطية بمعناها المعروف.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/str/extract-lines-matching \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out","pattern":"^ERROR\\b"}'const res = await fetch("https://api.kit.forhosting.com/str/extract-lines-matching", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out",
"pattern": "^ERROR\\b"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/extract-lines-matching",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out",
"pattern": "^ERROR\\b"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/extract-lines-matching", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"INFO server started\\nERROR database unavailable\\nWARN retrying\\nERROR request timed out","pattern":"^ERROR\\\\b"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out","pattern":"^ERROR\\b"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/extract-lines-matching", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"text": "INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out",
"pattern": "^ERROR\\b"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.extract_lines_matching",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
استخدموا أداة المتصفح للفحص السريع، أو استدعوا API مقابل $0.002 لكل طلب ناجح.
تحققوا من الأنماط وأدمجوا النتائج بأمان
تعيد هذه الحالات invalid_input بدل إنتاج نتيجة فارغة بصمت، وبذلك يمكن تمييز الخطأ المطبعي في قاعدة آلية من نمط صحيح لم يعثر على شيء. استخدموا مصفوفة الأسطر عند الحاجة إلى JSON منظم، أو النتيجة المجمعة لتمرير النص المصفى إلى ملف أو تذكرة أو أمر آخر. تكلف الأتمتة عبر API مبلغ $0.002 لكل طلب ناجح، أما المتصفح فمجاني.
أسئلة تقنية
ماذا يحدث إذا لم يطابق أي سطر؟
ينجح الطلب بنتيجة ومصفوفة فارغتين، وقيمة matched_count تساوي صفرًا، وtotal_lines يبين عدد الأسطر المفحوصة.