بناء جملة التعبير العادي في PHP لاستخراج جميع مثيلات التنسيق

StackOverflow https://stackoverflow.com/questions/837550

  •  10-07-2019
  •  | 
  •  

سؤال

أحاول استخراج كافة مثيلات تنسيق معين من سلسلة:

أتساءل عما إذا كان جهاز Sony الجديد [PT# 123456ABC;Sony] لديها هذه الميزة ولكن صديقي يقول أن Toshiba الجديد [PT# AD-3232hjk;توشيبا] لديه هذه الميزة.

أود أن أستخرج:

[PT # 123456ABC؛سوني]

[PT# AD-3232hjk؛توشيبا]

كما ترون هنا، العناصر الوحيدة في المواضع الثابتة هي:

  • [PT#
  • ;
  • ]

كنت أحاول استخدام أنواع مختلفة من strpos() ولكن نظرًا للأطوال والتنسيقات المختلفة لأرقام الأجزاء وأسماء الشركات المصنعة، لم أتمكن من سحب تلك المثيلات بشكل موثوق من سلسلة أكبر بكثير.لقد كنت أحاول طرقًا مختلفة لاستخدام التعبيرات العادية لحل هذه المشكلة ولكن معرفتي بها محدودة إلى حد ما.بعد أن أقوم باستخراج هذه التعبيرات ووضعها في متغيرات، سأحتاج بعد ذلك إلى فصل أرقام الأجزاء وأسماء الشركات المصنعة عن التعبير.وقد يكون تحقيق ذلك أسهل أيضًا باستخدام التعبيرات العادية.

هو موضع تقدير أي مساعدة.شكرًا

هل كانت مفيدة؟

المحلول

أعتقد أن هذا سيفعل ذلك

preg_match_all( "/(\[PT#\s+.*?;\s+.*?\])/", $input, $matches );

print_r( $matches );

وبدلاً من ذلك، إذا كنت تريد فقط التقاط المعلومات الفريدة

preg_match_all( "/\[PT#\s+(.*?);\s+(.*?)\]/", $input, $matches );

نصائح أخرى

$matches = array();
preg_match_all( "/\[PT#([^\];]+);([^\]]+)\]/", $input, $matches,  PREG_SET_ORDER);

foreach ($matches as $match) {
  echo "id=", trim($match[1]), " brand=", trim($match[2]), "\n";
}

أعتبر أنك ستقرأ من ملف نصي يحتوي على الكثير من تلك الإدخالات.ما يمكنك فعله هو:

preg_match_all("/\[PT#(.*?);[.*]?(.*?)\]/i", $text, $result);

سيضع جميع المطابقات في المصفوفة $result ويمكنك الوصول إليها على النحو التالي:

echo $result[1][0]; //echos first occurrence's serial

يتم فرز $result في العمود الرئيسي ويكون الإدخال الأول في المطابقة هو سلسلة المطابقة الكاملة

echo $result[0][0]; // would print [PT# 123456ABC; Sony]
echo $result[1][0]; // would print 123456ABC
echo $result[2][0]; // would print Sony

امل ان يساعد

يحرر:تم إصلاح التعبير العادي، ويجب أن يعمل الآن (لم يتم اختباره بعد)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top