ورود

View Full Version : مشکل خواندن سطر در preg_match



kiapmc
یک شنبه 05 فروردین 1403, 08:57 صبح
سلام

در متن


$string='ME
salam
123ff
tgg
654
';

$text="salam";

با کد دستوری


preg_match("/$text\n(.*)/", $string, $matches);
echo 'I need this line: ' . $matches[1] ;

سعی کردم مقدار سطر بعدی salam که 123ff هست رو بخونم ولی خالی نشون میده علتش چیه دوستان میتونند راهنمایی کنند

sd702004
یک شنبه 05 فروردین 1403, 13:39 عصر
اگر فرمت فایل‌تون ویندوزه باید کارکتر ‎\n رو با ‎\r\n جایگزین کنید. کد رو اگر بصورت زیر بنویسید چه فرمت فایل unix باشه چه windows کار میکنه:

preg_match("/$text\r?\n(.*)/", $string, $matches);
در unix خط جدید (new line) با کارکتر ‎LF ایجاد میشه اما در ویندوز با دو کارکتر ‎CR و LF.

CR = \r
LF = \n
کدی که نوشتین اگر جنبه تمرینی نداره چندان جالب نیست و بهتره از روش دیگری استفاده کنید.

kiapmc
یک شنبه 05 فروردین 1403, 13:59 عصر
اگر فرمت فایل‌تون ویندوزه باید کارکتر ‎\n رو با ‎\r\n جایگزین کنید. کد رو اگر بصورت زیر بنویسید چه فرمت فایل unix باشه چه windows کار میکنه:

preg_match("/$text\r?\n(.*)/", $string, $matches);
در unix خط جدید (new line) با کارکتر ‎LF ایجاد میشه اما در ویندوز با دو کارکتر ‎CR و LF.

CR = \r
LF = \n
کدی که نوشتین اگر جنبه تمرینی نداره چندان جالب نیست و بهتره از روش دیگری استفاده کنید.

واقعا دستت درد نکنه مشکل حل شد

یک موضوع دیگه این که اگر بخواهم در متن ذیل


$string='ME
salam

123fft
gg
654';

$text="salam";



بعد سلام یک سطر خالی هست طوری قرار بدهم که سطر اگر خالی بود سطر پایین تر را بخونه تا جایی که مقدار عددی باشه برای مقدار عددی از ([\d\/ \.]*) استفاده میکنم الان کد ذیل رو چطوری تغییر بدم که بعد salam اولین مقدار عددی را بخونه که 123 هست کمی پیچیده شد


preg_match("/$text\r?\n([\d\/ \.]*)/", $string, $matches);

sd702004
یک شنبه 05 فروردین 1403, 14:27 عصر
اگر می‌خواین اولین مقدار عددی بعد از salam رو بخونید این روش ساده‌تریه:

preg_match("/$text\D*(\d+)/", $string, $matches);

kiapmc
یک شنبه 05 فروردین 1403, 21:42 عصر
اگر می‌خواین اولین مقدار عددی بعد از salam رو بخونید این روش ساده‌تریه:

preg_match("/$text\D*(\d+)/", $string, $matches);


واقعا لذت بردم عالی بود واقعا دستت درد نکنه


$string='ME
654TPB

salam
123fft
gg654';

$text="salam";

اگر بخواهم اولین مقدار عددی قبل از salam رو بخونم که عدد 654 میشه

چطوری میشه

sd702004
دوشنبه 06 فروردین 1403, 00:12 صبح
خواهش میکنم. برای این کار کافیه جای ‎(\d+) رو با ‎$text عوض کنید.

preg_match("/(\d+)\D*$text/", $string, $matches);

kiapmc
دوشنبه 06 فروردین 1403, 01:35 صبح
خواهش میکنم. برای این کار کافیه جای ‎(\d+) رو با ‎$text عوض کنید.

preg_match("/(\d+)\D*$text/", $string, $matches);



عالی بود خدا خیرت بده

یک مشکلی هم هست این که برای مثال اگر


$string='ME
654TPB
salam)

123ff
tgg654';

$text="salam)"

;

وقتی ( باشه نمیتونه بخونه خالی نشون میده در حالی که در STRING و TEXT کاراکتر ( هست اگر ( رو با دیگر سیمبل ها مثل @ جایگزین میکنم میخونه نمیدونم مشکل با ( چیه


preg_match("/$text\D*(\d+)/", $string, $matches);

مقدار رو خالی نشون میده

sd702004
دوشنبه 06 فروردین 1403, 11:28 صبح
پرانتز جزو کارکترهای سینتکس regex محسوب میشه. اگه بخوای از خود پرانتز استفاده کنید باید اونو escape کنید:

$text = "salam\)"

kiapmc
دوشنبه 06 فروردین 1403, 12:11 عصر
پرانتز جزو کارکترهای سینتکس regex محسوب میشه. اگه بخوای از خود پرانتز استفاده کنید باید اونو escape کنید:

$text = "salam\)"

واقعا ممنون بابت زمانی که برای من گذاشتی

پس اینطور اصلا به این مورد توجه نکرده بودم از کجا میتونم لیست کارکترهای سینتکس regex رو پیدا کنم که اگر موردی پیش اومد بتونم اونو escape کنم

sd702004
دوشنبه 06 فروردین 1403, 12:45 عصر
خواهش میکنم. تو صفحه زیر بصورت خلاصه‌شده این موارد نمایش داده شده:

https://quickref.me/regex#regex-in-php