برگزیده های پرشین تولز

مرجع آموزشی ریجکس (regex)

sh.n.n786

Registered User
تاریخ عضویت
28 سپتامبر 2011
نوشته‌ها
454
لایک‌ها
94
دروود به همه دوستان ....

امروز من تو نت داشتم دنبال یک مرجعی برای ریجکس می گشتم که به هیچ چیزی نرسیدم ... :lol:

گفتم من این کتابو برای همه بگذارم تا بقیه هم ازش استفاده کنند من از رو همین کتاب یه چیزای کمی یاد گرفتم در حد نیازم امید وارم شما هم استفاده کنید .:cap:

پیوست شد ...

:wub:موفق و پیروز باشید .:wub:
 

فایل های ضمیمه

  • regex.rar
    744.2 KB · نمایش ها: 552
Last edited:

webs

Registered User
تاریخ عضویت
14 آپریل 2010
نوشته‌ها
2,016
لایک‌ها
1,464
محل سکونت
php.ini
کار با regex ها واقعاً اعصاب میخواد!!
اما وقتی به صورت صحیح نوشته شدند، نتیجه کار عالی و لذت بخش میشه.

اما در مجموع regex ها، بچه های خوبی هستند و کار آدم رو راه میندازن!

همانطور که اشاره کردید، مرجع درست و درمون در این زمینه خیلی کمه و بیشتر از مثال های آماده باید موارد دلخواه رو استخراج کرد.
 

sh.n.n786

Registered User
تاریخ عضویت
28 سپتامبر 2011
نوشته‌ها
454
لایک‌ها
94
کار با regex ها واقعاً اعصاب میخواد!!
اما وقتی به صورت صحیح نوشته شدند، نتیجه کار عالی و لذت بخش میشه.

اما در مجموع regex ها، بچه های خوبی هستند و کار آدم رو راه میندازن!

همانطور که اشاره کردید، مرجع درست و درمون در این زمینه خیلی کمه و بیشتر از مثال های آماده باید موارد دلخواه رو استخراج کرد.

دروود پسر من بیچاره شدم تا تونستم یاد بگیرم اصلا هیچی نیست :(
 

sh.n.n786

Registered User
تاریخ عضویت
28 سپتامبر 2011
نوشته‌ها
454
لایک‌ها
94
درود ....

این هم چنتا مثال که شاید بدردتون بخوره

PHP:
// Returns true if "abc" is found anywhere in $string.
ereg("abc", $string);            

// Returns true if "abc" is found at the beginning of $string.
ereg("^abc", $string);

// Returns true if "abc" is found at the end of $string.
ereg("abc$", $string);

// Returns true if client browser is Netscape 2, 3 or MSIE 3.
eregi("(ozilla.[23]|MSIE.3)", $_SERVER["HTTP_USER_AGENT"]);

// Places three space separated words into $regs[1], $regs[2] and $regs[3].
ereg("([[:alnum:]]+) ([[:alnum:]]+) ([[:alnum:]]+)", $string, $regs); 

// Put a <br /> tag at the beginning of $string.
$string = ereg_replace("^", "<br />", $string); 

// Put a <br /> tag at the end of $string.
$string = ereg_replace("$", "<br />", $string); 

// Get rid of any newline characters in $string.
$string = ereg_replace("\n", "", $string);
 

sh.n.n786

Registered User
تاریخ عضویت
28 سپتامبر 2011
نوشته‌ها
454
لایک‌ها
94
یکی دیگه :

PHP:
I was having a ton of issues with other people's phone number validation expressions, so I made my own. It works with most US phone numbers, including those with extentions. Format matches any of the following formats:

5551234567
555 1234567
555 123 4567
555 123-4567
555-1234567
555-123-4567
555123-4567
(555)1234567
(555)123 4567
(555)123-4567
(555) 1234567
(555) 123-4567
(555) 123 4567

And any of the following extentions can be added with or without a space between them and the number:
x123
x.123
x. 123
x 123
ext.123
ext. 123
ext 123
ext123

Extentions support between 1 and 5 digits.

Here is the expression:

$regex = '^[(]?[2-9]{1}[0-9]{2}[) -]{0,2}' . '[0-9]{3}[- ]?' . '[0-9]{4}[ ]?' . '((x|ext)[.]?[ ]?[0-9]{1,5})?$';
 

sh.n.n786

Registered User
تاریخ عضویت
28 سپتامبر 2011
نوشته‌ها
454
لایک‌ها
94
این هم یکی دیگه که فکر کنم خیلی ساده باشه

PHP:
// Delimiters may be slash, dot, or hyphen
$date = "04/30/1973";
list($month, $day, $year) = split('[/.-]', $date);
echo "Month: $month; Day: $day; Year: $year<br />\n";

البته از این پترن هم میشه استفاده کرد : [/.*]
البته از این پترن هم میشه استفاده کرد : [/]
البته از این پترن هم میشه استفاده کرد : [@/@]
 
Last edited:

webs

Registered User
تاریخ عضویت
14 آپریل 2010
نوشته‌ها
2,016
لایک‌ها
1,464
محل سکونت
php.ini
درود ....
این هم چنتا مثال که شاید بدردتون بخوره

ereg("abc", $string);
...
فکر کنم دستور ereg در php 5.x دیگه استفاده نمیشه و به جاش از Preg_match استفاده میشه. البته این تغییر، ارتباطی با regex نداره.

همانطور که خودتون گفتید این مثال ها ساده است، بعضی از عبارات منظم رو نیگاش می کنی لرزه بر اندام آدم میفته!!

یاد یه rage face افتادم؛ مضمونش این بود:
مثالی که معلم سر کلاس حل می کنه: sin 90 = 1
چیزی که تو امتحان میاد! arctan(x+z)+log(9x)/sin(3x+5y^2)^3 ....
 

sh.n.n786

Registered User
تاریخ عضویت
28 سپتامبر 2011
نوشته‌ها
454
لایک‌ها
94
فکر کنم دستور ereg در php 5.x دیگه استفاده نمیشه و به جاش از Preg_match استفاده میشه. البته این تغییر، ارتباطی با regex نداره.

همانطور که خودتون گفتید این مثال ها ساده است، بعضی از عبارات منظم رو نیگاش می کنی لرزه بر اندام آدم میفته!!

یاد یه rage face افتادم؛ مضمونش این بود:
مثالی که معلم سر کلاس حل می کنه: sin 90 = 1
چیزی که تو امتحان میاد! arctan(x+z)+log(9x)/sin(3x+5y^2)^3 ....

امید وارم به درد کسی بخوره

:D
 

webs

Registered User
تاریخ عضویت
14 آپریل 2010
نوشته‌ها
2,016
لایک‌ها
1,464
محل سکونت
php.ini
امیدوارم به درد کسی بخوره
منظورم این نبود که کدهای ساده ای گذاشتید. اتفاقاً چون تاپیک آموزشی است باید از کدهای ساده شروع کرد. ممنون که تاپیک رو شروع کردید.

چک کردن متعبربودن آدرس ایمیل:

کد:
preg_match( "/^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}$/", $input )

منبع: http://www.blog.highub.com/regular-expression/php-regex-regular-expression/validate-email-address/
 

sh.n.n786

Registered User
تاریخ عضویت
28 سپتامبر 2011
نوشته‌ها
454
لایک‌ها
94
درود ...

استفاده از تابع preg_replace()

تابع جایگزینی ....

ورژن های قابل استفاده : 4.0.4 و 4.0.2 و 5.1.0

کد PHP :
PHP:
$string = 'April 15, 2003';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '${1}1,$3';
echo preg_replace($pattern, $replacement, $string);
خروجی :
HTML:
April 1,2003
همین طور که از کد پیداست , ما به وسیله ی آرایه ها جایگزین می کنیم .{ ما quick و brown و fox با bear و black و slow جایگزین می کنیم}
PHP:
$string = 'The quick brown fox jumped over the lazy dog.';
$patterns = array();
$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';
$replacements = array();
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';
echo preg_replace($patterns, $replacements, $string);
خروج :
HTML:
The bear black slow jumped over the lazy dog.
منبع : function.preg-replace.php
 

sh.n.n786

Registered User
تاریخ عضویت
28 سپتامبر 2011
نوشته‌ها
454
لایک‌ها
94
درود به کلی پارامتر ها رو یادم رفت ....

این پارامتر های حسابی هستند که داخل پترن ازش استفاده میشه : زحمت فارسی سازیش با خودتون شرمندم


(


a group that includes …

[A-z0-9]


a letter or number …

[-A-z0-9]


a letter, number, or hyphen …

\.


a literal dot or period …

)


the end of the group …

+


found one or more times …

[A-z]


a letter …

{2,4}


found between two and four times.

\

general escape character with several uses
^

assert start of subject (or line, in multiline mode)
$

assert end of subject (or line, in multiline mode)
.

match any character except newline (by default)
[

start character class definition
]

end character class definition
|

start of alternative branch
(

start subpattern
)

end subpattern
?

extends the meaning of (, also 0 or 1 quantifier, also quantifier minimizer
*

0 or more quantifier
+

1 or more quantifier
{

start min/max quantifier
}

end min/max quantifier

Part of a pattern that is in square brackets is called a "character class". In a character class the only meta-characters are:

\

general escape character
^

negate the class, but only if the first character
-

indicates character range
]

terminates the character class

\a

alarm, that is, the BEL character (hex 07)
\cx

"control-x", where x is any character
\e

escape (hex 1B)
\f

formfeed (hex 0C)
\n

newline (hex 0A)
\r

carriage return (hex 0D)
\t

tab (hex 09)
\xhh

character with hex code hh
\ddd

\040

is another way of writing a space
\40

is the same, provided there are fewer than 40 previous capturing subpatterns
\7

is always a back reference
\11

might be a back reference, or another way of writing a tab
\011

is always a tab
\0113

is a tab followed by the character "3"
\113

is the character with octal code 113 (since there can be no more than 99 back references)
\377

is a byte consisting entirely of 1 bits
\81

\d

any decimal digit
\D

any character that is not a decimal digit
\s

any whitespace character
\S

any character that is not a whitespace character
\w

any "word" character
\W

any "non-word" character

\b

word boundary
\B

not a word boundary
\A

start of subject (independent of multiline mode)
\Z

end of subject or newline at end (independent of multiline mode)
\z

end of subject (independent of multiline mode)
\G

first matching position in subject​

منابع :
http://www.regular-expressions.info/reference.html
http://www.zytrax.com/tech/web/regex.htm
http://docs.python.org/library/re.html
http://developer.gnome.org/glib/2.33/glib-regex-syntax.html
 
Last edited:

sh.n.n786

Registered User
تاریخ عضویت
28 سپتامبر 2011
نوشته‌ها
454
لایک‌ها
94
منظورم این نبود که کدهای ساده ای گذاشتید. اتفاقاً چون تاپیک آموزشی است باید از کدهای ساده شروع کرد. ممنون که تاپیک رو شروع کردید.

چک کردن متعبربودن آدرس ایمیل:

کد:
preg_match( "/^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}$/", $input )

منبع: PHP Regex - Validate Email Address | Shi Chuan's blog

با تشکر از webs دوست خوب خودم ....

مثال کد :

PHP:
$input = '[email protected]';
echo preg_match( "/^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}$/", $input );

خروجی : 1 یا true

$input = 'sh.n.n786gmail.com';
echo preg_match( "/^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}$/", $input );

خروجی : 0 یا false
 

sh.n.n786

Registered User
تاریخ عضویت
28 سپتامبر 2011
نوشته‌ها
454
لایک‌ها
94
درود ...

تو این پترن ها که شاید به در کسی نخوره اطلاعات کارت های اعتباری اشخاص رو چک میکنه :

PHP:
//Credit card: All major cards
'^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6011[0-9]{12}|3(?:0[0-5]|[68][0-9])[0-9]{11}|3[47][0-9]{13})$'

//Credit card: American Express
'^3[47][0-9]{13}$'

//Credit card: Diners Club
'^3(?:0[0-5]|[68][0-9])[0-9]{11}$'

//Credit card: Discover
'^6011[0-9]{12}$'

//Credit card: MasterCard
'^5[1-5][0-9]{14}$'

//Credit card: Visa
'^4[0-9]{12}(?:[0-9]{3})?$'

//Credit card: remove non-digits
'/[^0-9]+/'
و بعد هم با توابع مورد نیازتون مقدار ها رو برمیگردونید
اگه از سینتکس ها سردر نیاوردید به کتاب مراجهع کنید پست (#1)
 

sh.n.n786

Registered User
تاریخ عضویت
28 سپتامبر 2011
نوشته‌ها
454
لایک‌ها
94
درود به همه ......

خوشبختانه چند مثالی در رابطه با آی پی (IP) ها در ریجکس پیدا کردم که امید وارم به دردتون بخوره ...

PHP:
IP address
Matches 0.0.0.0 through 999.999.999.999
پترن :
'\b([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\b'

IP address
Matches 0.0.0.0 through 999.999.999.999

پترن :
'\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b'
.........................................................................................................................................
IP address
Matches 0.0.0.0 through 255.255.255.255

پترن :
'\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b'

IP address
Matches 0.0.0.0 through 255.255.255.255

پترن :
'\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b'
در 2 سطر با 2 روش گفته شده
فکر کنم نیازی به توضیح نباشه همه چیز روشنه اما اگه مشکلی بود در خدمتیم ... :blush:
 

sh.n.n786

Registered User
تاریخ عضویت
28 سپتامبر 2011
نوشته‌ها
454
لایک‌ها
94
دریافت اطلاعات از بین تگ های HTML
PHP:
HTML file
پترن :
'<html>.*?<head>.*?<title>.*?</title>.*?</head>.*?<body[^>]*>.*?</body>.*?</html>'

پترن :
'<html>(?>.*?<head>)(?>.*?<title>)(?>.*?</title>)(?>.*?</head>)(?>.*?<body[^>]*>)(?>.*?</body>).*?</html>'

پترن :
'<([A-Z][A-Z0-9]*)[^>]*>(.*?)</\1>'

پترن :
'<%TAG%[^>]*>(.*?)</%TAG%>'

پترن :
'</?[a-z][a-z0-9]*[^<>]*>'
منبع : PHP regular expressions examples
 

sh.n.n786

Registered User
تاریخ عضویت
28 سپتامبر 2011
نوشته‌ها
454
لایک‌ها
94
این هم یه مثال برای جایگزینی کارکتر ها این مثال در Framework خیلی کاربرد داره امید وارم به دردتون بخوره :

کد :

PHP:
URL: Different URL parts
Protocol, domain name, page and CGI parameters are captured into backreferenes 1 through 4
'\b((?#protocol)https?|ftp)://((?#domain)[-A-Z0-9.]+)((?#file)/[-A-Z0-9+&@#/%=~_|!:,.;]*)?((?#parameters)\?[-A-Z0-9+&@#/%=~_|!:,.;]*)?'

URL: Different URL parts
Protocol, domain name, page and CGI parameters are captured into named capturing groups.
Works as it is with .NET, and after conversion by RegexBuddy on the Use page with Python, PHP/preg and PCRE.
'\b(?<protocol>https?|ftp)://(?<domain>[-A-Z0-9.]+)(?<file>/[-A-Z0-9+&@#/%=~_|!:,.;]*)?(?<parameters>\?[-A-Z0-9+&@#/%=~_|!:,.;]*)?'

URL: Find in full text
The final character class makes sure that if an URL is part of some text, punctuation such as a 
comma or full stop after the URL is not interpreted as part of the URL.
'\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]'

URL: Replace URLs with HTML links
preg_replace('\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]', '<a href="\0">\0</a>', $text);
 
Last edited:

sh.n.n786

Registered User
تاریخ عضویت
28 سپتامبر 2011
نوشته‌ها
454
لایک‌ها
94
درود این پترن فکر کنم کاربردی باشه به وسیله این پترن میشه ورژنی که USER_AGENT میده رو در آورد
PHP:
'#(?<version>[0-9.|a-zA-Z.]*)#';
من اینو تست نکردم یکی بم داد گفت بذارم ...

موقث باشید
 

sh.n.n786

Registered User
تاریخ عضویت
28 سپتامبر 2011
نوشته‌ها
454
لایک‌ها
94
درود و ...

این هم یک مثال از تابع : preg_quote
کارکتر های مخصوص این تابع: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

PHP:
<?php
$keywords = '$40 for a g3/400';
$keywords = preg_quote($keywords, '/');
echo $keywords; // returns \$40 for a g3\/400

و 

$textbody = "This book is *very* difficult to find.";
$word = "*very*";
$textbody = preg_replace ("/" . preg_quote($word) . "/",
                          "<i>" . $word . "</i>",
                          $textbody);
کسی تونست مثال های بهتری بذاره ... موفق باشید
 

sh.n.n786

Registered User
تاریخ عضویت
28 سپتامبر 2011
نوشته‌ها
454
لایک‌ها
94
این کلاس ها همیکی دیگه از میانبر های regex محسوب میشند که pattern شما رو ساده تر می کنه
بیشتر زبان ها برنامه نویسی از این کلاس ها پشتیبانی میکنند ( به غیر از جاوا اسکریپت )

معادل عبارت [a-zA-Z0-9]
کد:
[:alnum:]
معادل عبارت [a-zA-Z]
کد:
[:alpha:]
معادل کلید tab همون عبارت [\t]
کد:
[:blank:]
این کلاس کد های ascii رو برمیگردونه از 0 تا 31
کد:
[:cntrl:]
معادل عبارت [0-9]
کد:
[:digit:]
این کلاس هم مشابه کلاس [: print:] هست تنها فرقش اینه که space متنو نمیگیره ( جای خالی یا فاصله )
کد:
[:graph:]
همه چیزو چاپ میکنه
کد:
[:print:]
این کلاس هم حروف کوچک رو میگیره [a-z]
کد:
[:lower:]
این کلاس تمامی سینتکس ها مجازو دریافت میکنه ( !@#$%^&*)(_+| و ... ) ( حروف الفبا و عدد ها و حروف ASCII شامل نمیشه )
کد:
[:punct:]
از اسمش مشخصه تمام کارکتر های نامرعی رو میگیره ( فاصله )
کد:
[:space:]
این کلاس هم حروف بزرگ منتو میگیره [A-Z]
کد:
[:upper:]
ایم کلاس تمامی کارکتر هایی که بر مبنای 16 هستندو میگیره [a-fA-F0-9] مثال هم کد رنگ ها در CSS
کد:
[:xdigit:]

امید وارم مفید باشه موفق بشاید
 

sh.n.n786

Registered User
تاریخ عضویت
28 سپتامبر 2011
نوشته‌ها
454
لایک‌ها
94
درود
این هم یه مثال خیلی ساده برای E-mail :

هدف :

this is my email [email protected] and it's a example

پترن :

کد:
\w+@\w+\.\w+

خروجی : [email protected]
توضیحات :

در اینجا کارکتر \w معادل عبارت : [a-zA-Z0-9] می باشد

موفق باشید
 
بالا