نقل قول: استخراج عبارت از توی متن
من از این استفاده می کنم :
function after($this, $inthat) {
if(!is_bool(strpos($inthat, $this))) {
return substr($inthat, strpos($inthat,$this)+strlen($this));
}else{
return false;
}
}
function before($this, $inthat) {
return substr($inthat, 0, strpos($inthat, $this));
}
function between($this, $that, $inthat) {
return before($that, after($this, $inthat));
}
function occurrencecount($this, $that, $inthat, $count) {
$newinthat = after("$that", after("$this", $inthat));
if($newinthat != false){
$count = $count + 1;
return occurrencecount($this, $that, $newinthat, $count);
}else{
return $count;
}
}
$xml = 'Line 222: <Tag>phrase1</Tag>Line 241: <Tag>phrase2</Tag>Line 260: <Tag>phrase3</Tag>Line 279: <Tag>phrase4</Tag>Line 298: <Tag>phrase5</Tag>Line 317: <Tag>phrase6</Tag>';
while (occurrencecount('<Tag>','</Tag>',$xml,'0')){
$ex = between ('<Tag>','</Tag>',$xml); $xml = str_replace ('<Tag>'.$ex.'</Tag>','',$xml); $ex .= '\n\r'.$ex; }
echo $ex;
نقل قول: استخراج عبارت از توی متن
فایل های xml کار باهاشون راحت
$text = "
<tag>phrase1</tag>
<tag>phrase2</tag>
<tag>phrase3</tag>
<tag>phrase4</tag>
<tag>phrase5</tag>
";
//classe built-in domDocument ro fara mikhooni
$dom = new domDocument;
// matneto barash load mikoni
$dom->loadXML($text);
// migi kodoom tagro peyda kone
$content = $dom->getElementsByTagname('tag');
$tags = array();
foreach ($content as $item){
$tags[] = $item->nodeValue;
}
print_r($tags);
وسط متن همه توضیحات لازمه رو نوشتم
نقل قول: استخراج عبارت از توی متن
بابا چرا اینقدر کد رو پیچیده میکنید؟ الان شما میخواین هر خطی که توش <tag>...</tag> بود حذف بشه؟ اینو تست کنید:
$str = preg_replace('#^\s*<tag>.*?</tag>$#im', '', $str);
نقل قول: استخراج عبارت از توی متن
اگه میخواین استخراج بشه هم این کد رو استفاده کنید:
$matches = array();
if(preg_match_all('#^\s*(<tag>(.*?)</tag>)$#im', $str, $matches)) {
print_r($matches[1]); // entire tag element
print_r($matches[2]); // tag content only
}
نقل قول: استخراج عبارت از توی متن
نقل قول:
نوشته شده توسط
MMSHFE
بابا چرا اینقدر کد رو پیچیده میکنید؟ الان شما میخواین هر خطی که توش <tag>...</tag> بود حذف بشه؟ اینو تست کنید:
$str = preg_replace('#^\s*<tag>.*?</tag>$#im', '', $str);
آقای شهرکی حالا دارن یاد می گیرن بهتر درست یاد بگیرن بدترین روش این که بخوان تو xml و html با regex کار کنند. یه قانون هست تو برنامه نویسی می گه تا زمانی که تابع ها و کلاس های آماده برای چیزی توسط زبان برنامه نویسی آماده شد هیچ وقت تلاش نکنیم از راه های خودمان پیش برویم.
و واقعاً کدی که نوشتم پیچیده نیست. 3 خط کلاً یکی لود کردن کلاس، بعدیش شناساندن متن و خط سوم هم پیدا کردن تگ و سپس یه حلقه که تگ ها را کامل استخراج کند اگر برای برنامه نویسی این کار ساده خیلی سخت باشد بایستی درباره خواندن دوباره کتاب های برنامه نویسی با PHP تجدید نظر کنند.
نقل قول: استخراج عبارت از توی متن
روی چه حسابی این حرف رو میزنید؟ مصرف حافظه XMLDom و SimpleHTMLDOM رو با RegExp یکی میکنید؟ بعلاوه مگه RegExp جزو امکانات آماده زبان PHP نیست؟ شما با ab مصرف حافظه و CPU و زمان پاسخ کد خودتون رو با کدی که من گذاشتم مقایسه کنید و بعد بگین بدترین روش استفاده از RegExp هست. بحث اصلاً سر سادگی و سختی کدنویسی نیست. سر لقمه دور سر چرخوندن و مصرف بیهوده منابع سروره. حتی ازنظر کوتاهی و سادگی کد هم فکر میکنم کدی که من گذاشتم خیلی ساده تر و قابل فهم تر از کدی باشه که شما گذاشتین (هرچند کد شما هم پیچیده نیست و فقط منظورم قیاس بین این دو کد بود)
نقل قول: استخراج عبارت از توی متن
نقل قول:
نوشته شده توسط
MMSHFE
روی چه حسابی این حرف رو میزنید؟ مصرف حافظه XMLDom و SimpleHTMLDOM رو با RegExp یکی میکنید؟ بعلاوه مگه RegExp جزو امکانات آماده زبان PHP نیست؟ شما با ab مصرف حافظه و CPU و زمان پاسخ کد خودتون رو با کدی که من گذاشتم مقایسه کنید و بعد بگین بدترین روش استفاده از RegExp هست. بحث اصلاً سر سادگی و سختی کدنویسی نیست. سر لقمه دور سر چرخوندن و مصرف بیهوده منابع سروره. حتی ازنظر کوتاهی و سادگی کد هم فکر میکنم کدی که من گذاشتم خیلی ساده تر و قابل فهم تر از کدی باشه که شما گذاشتین (هرچند کد شما هم پیچیده نیست و فقط منظورم قیاس بین این دو کد بود)
کمی مثل اینکه لحن من بد بوده و باعث شد شما موضع بگیرید و کاملاً پوزش می طلبم. موضع گیری ها را بگذاریم کنار چون اینگونه بحث های علمی و تخصصی به میدان جنگ و دعوا و موضع گیری های بی جا تبدیل می شود. که ماشاء الله در این انجمن زیاد دیدم. بگذارید موضوع را از جنبه ی دیگر پاسخ دهیم.
مزایا و معایب Regex در مقابل تابع simpleDom
-آیا simpleDom در مقابل regular expression (Regex) منابع سخت افزاری بیشتری مصرف می کند؟
simpleDom و Regex هر دو در استفاده سخت افزار از منابع مختلفی استفاده می کنند و این بخاطر تکنیک های مختلف پردازشی است. Regular expression ها بخاطر استفاده از تکنیک text proccessing از CPU بیشتر و simpleDom بخاطر استفاده از تکنیک Parsing از رم بیشتری استفاده می کند.
*Regex مصرف سی پی یو بیشتر
*simpleDom مصرف رم بیشتر
- کار با regular expression ها آسانتر است یا simpleDom؟
نوشتن regex با توجه به اینکه کاری بس سخت و دشوار و نیاز به دقت بیشتری دارد بالتبع استفاده از simpleDom که به آسانی می توانید از کلاس آن استفاده و خروجی کنید.
- سرعت regular expression بیشتر است یا simpleDom؟
بالتبع سرعت regex با توجه به نوع پردازشش بالاتر است.
- دقت regular expression بیشتر است یا simpleDom؟
با توجه به اینکه نوشتن الگوهای regular expression بصورت پویا انجام پذیر نیست و برای هر مورد بایستی الگوی خاصی نوشتن شود و نوشتن این الگوها هم کاری کمی دشوار است و نیاز به دقت بالاتر دارد بنابراین simpleDom دقت بیشتری را در رسیدن به جواب دارد.
- حال با توجه به این موارد استفاده از کدام بهتر است؟
خوب بالتبع در هر مورد ما مزایا و معایبی گفتیم. شما با توجه به توانایی های خود و نوع کاری که دارید می توانید از هر دو آن ها استفاده نمایید.
اما بعنوان نویسنده این متن 1 سوال اساسی در ذهن شما بوجود می آورم. 1- آیا در کار خود دقت نیاز دارید یا سرعت؟ هر موقع به این جواب رسیدید می توانید روش مورد نظر خود را انتخاب نمایید.
نقل قول: استخراج عبارت از توی متن
یک مورد دیگه رو باید درنظر داشته باشیم و اون هم اینه که برای سرویس دهنده هاست ما مهمتره که مصرف پردازنده کمتر باشه یا مصرف حافظه و اگه از کدوم زیاد مصرف کنیم، اکانت ما Suspend میشه؟ بهرصورت همونطور که گفتین، مزایا و معایب هرکدوم مشخصه ولی اگه فرد توی RegExp به مهارت رسیده باشه (که ضرورت کار یک برنامه نویس خبره است)، شخصاً توصیه میکنم بجای کلاسهای کار با DOM از عبارات با قاعده استفاده بشه چون فرضاً Simple HTML DOM برای تفسیر یک صفحه 40 کیلوبایتی 1 مگابایت حافظه مصرف میکنه که اگه این سایت 1000 بازدیدکننده همزمان داشته باشه، به معنای اشغال 1 گیگابایت حافظه خواهد بود. بعلاوه با قدرت پردازنده های امروزی سرورها، پردازش RegExp اختلاف زیادی در بار پردازنده سرور ایجاد نمیکنه. درسته که RegExp مصرف CPU بیشتری داره ولی حقیقتاً این مصرف نسبت به مصرف پردازنده DOM (بخاطر تولید شئ برای هر Node و مقداردهیها و...) در خیلی از موارد کمتره (در عمل تست کردم که میگم).