PDA

View Full Version : حذف یک سری کاراکتر از یک string



Salazar.mi
یک شنبه 08 دی 1398, 22:37 عصر
سلام من با این دستور میتونستم کاراکتر های ؟,@,= در رشتم با فضای خالی جایگزین کنم
ولی اگر رشته مورد نظر یه دونه از این علامت ها را نداشته باشه ارور میده
میخواهم فقط در صورت وجود هر علامت بیاد جایگزین را انجام بده
بنظرم با دستوری مثل if(isset بشه ولی کجا و چجوری نمیدونم


$patterns=array('/=/','/@/','/?/');


$replacements=array(" "," "," ");


$r1=preg_replace($patterns,$replacements,$string1) ;

اینو نوشتم اینم ارور میده


$patterns=array('/=/','/@/','/?/');




$replacements=array(" "," "," ");
for($i=0;$i<3;$i++)
{
if(isset($patterns[$i]))
{
$r1=preg_replace($patterns,$replacements,$string1) ;
}
}

ASHKANLAEI
دوشنبه 09 دی 1398, 06:31 صبح
پترن ریجکس رو به این شکل تغییر بدین:

/(\?|\=|\@)/علامت | باعث میشه که یک جور or بین ریجکس برقرار بشه. بنابراین دیگه نیازی به چند پترن و آرایه نیست.

Salazar.mi
دوشنبه 09 دی 1398, 14:07 عصر
بی نهایت ممنونم
فقط الان من هم بخواهم علامت ها پاک بشن هم عددها چیکار باید کنم
الان مثلا اولی علامتها را پاک میکنه
دومی عددها را
ولی وقتی مثلا تو اولی به جای ? این را [0-9]+ میزارم ارور میده


$patterns=array("/(\?|\=|\@|\!|\'#'|\$|\%|\^|\&|\*|\(|\)|\+|\_|\-|\'|\"|\:|\;|\.|\,|\[|\]|\{|\}|\<|\>)/");


$patterns=array('/[0-9]+/');



ممنون میشم جواب بدین تشکر

ASHKANLAEI
دوشنبه 09 دی 1398, 15:10 عصر
اول این که شما باید با ؟ علامت \ رو هم پاک کنید.
دوم این که شما میتونید از سایت https://www.regular-expressions.info/ دربارۀ ریجکس اطلاعات زیادی به دست بیارین. (اگر لینک فارسی و سریع میخواین از https://blog.faradars.org/regex-tutorial-with-examples/ استفاده کنید)
سوم این که میتونید از ریجکس خیلی راحت تری مثل این ها استفاده کنید:

[^\w\s]توضیح: تشخیص تمام کاراکتر ها به غیر از حرف های انگلیسی.

[0-9_?!.,><:";'\\|}{\[\]\-=+@#$%^&*()~`؟]توضیح: تشخیص تمام علامت ها و اعداد

چهارم این که شما زمانی که دارین پترن ها رو از رشته ها حذف میکنید فرق نداره که اعداد رو رقم به رقم پیدا کنید یا چند رقمی. برای همین نیازی به + یا * آخر محدوده ها ندارین.

Salazar.mi
دوشنبه 09 دی 1398, 17:05 عصر
بی نهایت سپاسگذارم واقعا ممنون
من خواندم چیزهایی که شما گفته بدید را
ولی راستش چون اصلا باهاشون آشنایی نداشتم خیلی برام گنگ بود
این





[0-9_?!.,><:";'\\|}{\[\]\-=+@#$%^&*()~`؟]







[0-9_?!.,><:";'\\|}{\[\]\-=+@#$%^&*()~`؟]



را که خودتون گفته بودید را گذاشتم تو کد اشتباه شد


${"r".$i} = preg_replace('[0-9_?!.,><:";'\\|}{\[\]\-=+@#$%^&*()~`؟]', ' ', ${"string".$i});

میشه لطفا بگبن از این چجوری باید استفاده کنم باید دورش ' ' بزارم یا / یا \ تا درست کار کنه
ببخشید شرمنده من خیلی سوال میپرسم
و اینکه طبق چیزی که من خواندم این امکان وجود دارد که کلمات با طول 3 کاراکتر کمتر را تشخیص بده مثل این درسته؟


([A-Z]{3})

الان بخواهم اول علامت ها و اعداد را حذف کنه بعد کاراکترهای کمتر از 3 تا باید چی بنویسم؟
شرنده ممنون میمشم کمکم کنید.

ASHKANLAEI
دوشنبه 09 دی 1398, 17:12 عصر
برای اولین سوال، نمیدونم چرا اشتباه شده اما فکر کنم باید اول و آخر رشته / بزارین (بدون حذف ' ها).
برای کلمات سه حرفی و کم تر میتونید از این استفاده کنید:
\b\w{1,3}\bاز یاد نبرید که اول و آخرش / بزارید

Salazar.mi
دوشنبه 09 دی 1398, 17:23 عصر
مشکل اوالی با ' از وسطش پاک کردم درست شد


${"r".$i} = preg_replace('/[0-9_?!.,><:";\\|}{\[\]\-=+@#$%^&*()~`؟]/', ' ', ${"string".$i});

ولی نمیدونم الان این علامت ' را چجوری حذف کنم
دومی هم درست شد بی نهایت ممنونممم

Salazar.mi
دوشنبه 09 دی 1398, 17:50 عصر
مجبور شدم واسه ' یه دونه جدا بنویسم
راه حل دیگه ای هم داره؟؟؟؟؟؟
ممنون میشم اگر راه حل دیگه ای داره بگین ممنونمم
شرمنده اینا خیلی خوب بودن من همش چیزای جدید پیدا میکنم
با این کدها میشه حروف و اعداد یونانی را هم حذف کرد؟ یا میتونه تشخیص بده اگر چند کاراکتر انگلیسی که حروف بزرگ دارن پشت سرهم اومدن و اینا کلمات اختصاری هستن و حذفشون کنه؟


${"r".$i} = preg_replace('/[0-9_?!.,><:";\\|}{\[\]\-=+@#$%^&*()~`؟ I II III IV ]/', ' ', ${"string".$i});
${"a".$i} = preg_replace("/'/", ' ', ${"r".$i});
${"b".$i} = preg_replace('/\b\w{1,3}\b/', ' ', ${"a".$i});

ASHKANLAEI
دوشنبه 09 دی 1398, 20:28 عصر
ببینید شما از \ دقیقاً قبل از ' استفاده کنید.
و برای چند حرف نمیتونید توی [] بنویسید باید بیرونش بنویسید یک چیز مثل این:
[...]|II|IV|III

Salazar.mi
دوشنبه 09 دی 1398, 20:41 عصر
بی نهایت منونم درست شد
ولی شرمنده \ را چجوری باید حذف کنم؟؟؟؟؟

ASHKANLAEI
سه شنبه 10 دی 1398, 08:19 صبح
${"r".$i} = preg_replace('/[0-9_?!.,><:";\\|}{\[\]\-=+@#$%^&*()~`؟ I II III IV ]/', ' ', ${"string".$i});
${"a".$i} = preg_replace("/'/", ' ', ${"r".$i});
${"b".$i} = preg_replace('/\b\w{1,3}\b/', ' ', ${"a".$i});
رو به

${"r".$i} = preg_replace('/[0-9_?!.,><:";\\|}{\[\]\-=+@#$%^&*()~`؟\']/', ' ', ${"string".$i});
${"a".$i} = preg_replace('/\b\w{1,3}\b/', ' ', ${"r".$i});
تغییر بدین.

Salazar.mi
سه شنبه 10 دی 1398, 11:23 صبح
بسیار بسیار ممنوم
ولی حقیقتا بازم \ را پیدا نمیکنه
شرمنده

ASHKANLAEI
سه شنبه 10 دی 1398, 11:29 صبح
در ریجکس \\\\ بزارید

Salazar.mi
سه شنبه 10 دی 1398, 11:30 صبح
درست شد بی نهایت ممنونمممم
خدا خیرتون بده