Hello everyone, this article I will continue to write the topic of Regular Expression
, if you do not know what it is, please refer to this article. Today I will introduce you to some functions used with Regular Expression
in PHP and some cases that we need Regex.
Some functions use Regex in PHP
In PHP we have a total of 9 PCRE functions to use
- preg_filter – perform a search of regular and alternative results
- preg_grep – returns an array of results that match the pattern
- preg_last_error – returns the error code of the last execution of the regex PCRE
- preg_match && preg_match_all – execute matching regular expressions, the difference between the lower part I will say more clearly
- preg_quote – put a backslash before each character as a special character in a regular expression in the input string
- preg_replace – executes a search for which elements match a regular expression and replaces it with the string we need.
- preg_replace_callback – executes a search for which elements match the regular expression and replaces it with the string we need and the result is then used to perform another callback function. The final result returned is the input after it has replaced and passed through that callback function.
- preg_split – splits strings with regular expressions
And according to his work experience, the most commonly used are 3 functions preg_match
, preg_match_all
and preg_replace
.
preg_match
This function is used to check if the input data matches the regular expression string and returns the result. Syntax
1 2 |
<span class="token function">preg_match</span> <span class="token punctuation">(</span> <span class="token variable">$pattern</span> <span class="token punctuation">,</span> <span class="token variable">$subject</span> <span class="token punctuation">,</span> <span class="token variable">$match</span> <span class="token punctuation">,</span> <span class="token variable">$flags</span> <span class="token punctuation">,</span> <span class="token variable">$offset</span> <span class="token punctuation">)</span> |
Inside:
- $ pattern is Banana Regex
- $ subject is the string to match
- $ match is the result returned, passed as a reference (can be left blank if not needed)
- $ flags is a parameter that indicates where the string matches (can be left blank) by default. $ flag = 0
- $ offset is a parameter that specifies the starting position of the match (can be left blank) by default $ offset = 0
I have a simple example as follows
2 parameters passed
1 2 3 4 5 6 7 8 9 10 11 |
<span class="token delimiter important"><?php</span> <span class="token variable">$testString</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"hello honey"</span> <span class="token punctuation">;</span> <span class="token variable">$check</span> <span class="token operator">=</span> <span class="token function">preg_match</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/hello/'</span> <span class="token punctuation">,</span> <span class="token variable">$testString</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$check</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token single-quoted-string string">'Khớp chuỗi'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token single-quoted-string string">'Chuỗi không khớp'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">//Kết quả: Khớp chuỗi</span> |
3 parameters passed Same as the example above but the third parameter as follows
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<span class="token delimiter important"><?php</span> <span class="token variable">$testString</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"hello honey"</span> <span class="token punctuation">;</span> <span class="token variable">$match</span> <span class="token variable">$check</span> <span class="token operator">=</span> <span class="token function">preg_match</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/hello/'</span> <span class="token punctuation">,</span> <span class="token variable">$testString</span> <span class="token punctuation">,</span> <span class="token variable">$matches</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$check</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token single-quoted-string string">'<pre>'</span> <span class="token punctuation">;</span> <span class="token function">print_r</span> <span class="token punctuation">(</span> <span class="token variable">$matches</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token single-quoted-string string">'</pre>'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token single-quoted-string string">'Chuỗi không khớp'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">//Kết quả: </span> <span class="token keyword">Array</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">></span> hello <span class="token punctuation">,</span> <span class="token punctuation">)</span> |
4 parameters passed
The same example above but this time I will return the position of the string match by passing additional parameter 4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<span class="token delimiter important"><?php</span> <span class="token variable">$testString</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"hello honey hello"</span> <span class="token punctuation">;</span> <span class="token variable">$match</span> <span class="token variable">$check</span> <span class="token operator">=</span> <span class="token function">preg_match</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/hello/'</span> <span class="token punctuation">,</span> <span class="token variable">$testString</span> <span class="token punctuation">,</span> <span class="token variable">$matches</span> <span class="token punctuation">,</span> <span class="token constant">PREG_OFFSET_CAPTURE</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$check</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token single-quoted-string string">'<pre>'</span> <span class="token punctuation">;</span> <span class="token function">print_r</span> <span class="token punctuation">(</span> <span class="token variable">$matches</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token single-quoted-string string">'</pre>'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token single-quoted-string string">'Chuỗi không khớp'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">//Kết quả: </span> <span class="token keyword">Array</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token keyword">Array</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">></span> hello <span class="token punctuation">[</span> <span class="token number">1</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token punctuation">[</span> <span class="token number">1</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token keyword">Array</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">></span> hello <span class="token punctuation">[</span> <span class="token number">1</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token number">12</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> |
Here 0 and 12 are the start of the string matching the pattern
5 parameters passed Also the example above but we will pass the 5th parameter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<span class="token delimiter important"><?php</span> <span class="token variable">$testString</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"hello honey hello"</span> <span class="token punctuation">;</span> <span class="token variable">$match</span> <span class="token variable">$check</span> <span class="token operator">=</span> <span class="token function">preg_match</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/hello/'</span> <span class="token punctuation">,</span> <span class="token variable">$testString</span> <span class="token punctuation">,</span> <span class="token variable">$matches</span> <span class="token punctuation">,</span> <span class="token constant">PREG_OFFSET_CAPTURE</span> <span class="token punctuation">,</span> <span class="token number">11</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$check</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token single-quoted-string string">'<pre>'</span> <span class="token punctuation">;</span> <span class="token function">print_r</span> <span class="token punctuation">(</span> <span class="token variable">$matches</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token single-quoted-string string">'</pre>'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token single-quoted-string string">'Chuỗi không khớp'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">//Kết quả: </span> <span class="token keyword">Array</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token keyword">Array</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">></span> hello <span class="token punctuation">[</span> <span class="token number">1</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token number">12</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> |
If we pass this 5th argument to 11, the implication is that the function will regex from position 11 of the input string.
preg_match_all
This function works by matching all the patterns in the string. Left parameters are exactly the same as the preg_match
function I mentioned above.
1 2 |
<span class="token function">preg_match_all</span> <span class="token punctuation">(</span> <span class="token variable">$pattern</span> <span class="token punctuation">,</span> <span class="token variable">$subject</span> <span class="token punctuation">,</span> <span class="token variable">$match</span> <span class="token punctuation">,</span> <span class="token variable">$flags</span> <span class="token punctuation">,</span> <span class="token variable">$offset</span> <span class="token punctuation">)</span> |
Inside:
- $ pattern is Banana Regex
- $ subject is the string to match
- $ match is the result returned, passed as a reference (can be left blank if not needed)
- $ flags is a parameter that indicates where the string matches (can be left blank) by default. $ flag = 0
- $ offset is a parameter that indicates the starting position of the match (can be left blank) default $ offset = 0 I have a simple example as follows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span class="token delimiter important"><?php</span> <span class="token variable">$userinfo</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"Name: <b>John Poul</b> <br> Title: <b>PHP Guru</b>"</span> <span class="token punctuation">;</span> <span class="token function">preg_match</span> <span class="token punctuation">(</span> <span class="token double-quoted-string string">"/<b>(.*)</b>/U"</span> <span class="token punctuation">,</span> <span class="token variable">$userinfo</span> <span class="token punctuation">,</span> <span class="token variable">$pat_array</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token double-quoted-string string">"<pre>"</span> <span class="token punctuation">;</span> <span class="token function">print_r</span> <span class="token punctuation">(</span> <span class="token variable">$pat_array</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token double-quoted-string string">"</pre>"</span> <span class="token punctuation">;</span> <span class="token delimiter important">?></span> <span class="token comment">// Kết quả</span> <span class="token keyword">Array</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">></span> John Poul <span class="token punctuation">[</span> <span class="token number">1</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">></span> John Poul <span class="token punctuation">)</span> |
If we use preg_match_all
, the result is as follows
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="token keyword">Array</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token keyword">Array</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">></span> John Poul <span class="token punctuation">[</span> <span class="token number">1</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token constant">PHP</span> Guru <span class="token punctuation">)</span> <span class="token punctuation">[</span> <span class="token number">1</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token keyword">Array</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">></span> John Poul <span class="token punctuation">[</span> <span class="token number">1</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token constant">PHP</span> Guru <span class="token punctuation">)</span> <span class="token punctuation">)</span> |
The difference between preg_match_all()
and preg_match()
is that preg_match_all()
will match all matches in the string, and preg_match()
will only match the first one it meets, and the next it won’t match anymore.
preg_replace
1 2 |
<span class="token function">preg_replace</span> <span class="token punctuation">(</span> <span class="token variable">$pattern</span> <span class="token punctuation">,</span> <span class="token variable">$stringReplacement</span> <span class="token punctuation">,</span> <span class="token variable">$subject</span> <span class="token punctuation">,</span> <span class="token variable">$limit</span> <span class="token punctuation">,</span> <span class="token variable">$count</span> <span class="token punctuation">)</span> |
- $ pattern is the regular expression you want to match
- $ stringReplacement is the replacement string for the found result
- $ subject is the string that you need to search and replace
- $ limit is the limit of the number of string replacements, the default $ limit = -1 is unlimited (can be left blank)
- $ count is the number of string replacements when using the function, used as a reference (can be left blank)
For example
1 2 3 4 5 6 7 8 9 10 |
<span class="token delimiter important"><?php</span> <span class="token variable">$age</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"He was 24 years old"</span> <span class="token punctuation">;</span> <span class="token variable">$updateAge</span> <span class="token operator">=</span> <span class="token function">preg_replace</span> <span class="token punctuation">(</span> <span class="token double-quoted-string string">"([0-9]+)"</span> <span class="token punctuation">,</span> <span class="token double-quoted-string string">"30"</span> <span class="token punctuation">,</span> <span class="token variable">$age</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">print</span> <span class="token variable">$updateAge</span> <span class="token punctuation">;</span> <span class="token delimiter important">?></span> <span class="token comment">//Ket qua </span> He was <span class="token number">30</span> years old |
Some of the examples
Validate Email
1 2 3 4 5 6 7 8 9 10 11 |
<span class="token keyword">function</span> <span class="token function">validateEmail</span> <span class="token punctuation">(</span> <span class="token variable">$email</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$pattern</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/"</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">preg_match</span> <span class="token punctuation">(</span> <span class="token variable">$pattern</span> <span class="token punctuation">,</span> <span class="token variable">$email</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">true</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token boolean">false</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Validate URL
1 2 3 4 5 6 7 |
<span class="token keyword">function</span> <span class="token function">validateURL</span> <span class="token punctuation">(</span> <span class="token variable">$url</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$pattern</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i"</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">preg_match</span> <span class="token punctuation">(</span> <span class="token variable">$pattern</span> <span class="token punctuation">,</span> <span class="token variable">$url</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Blank
If you guys have a question segment like “My name is ___. I’m from ____”
The request for a post is that the text must contain a blank paragraph, which is a minimum of 3 underscores to pass, and a maximum of 5 blank.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<span class="token keyword">function</span> <span class="token function">checkBlank</span> <span class="token punctuation">(</span> <span class="token variable">$input</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$regex</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'/_{3,}/'</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">preg_match</span> <span class="token punctuation">(</span> <span class="token variable">$regex</span> <span class="token punctuation">,</span> <span class="token variable">$input</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">function</span> <span class="token function">checkNumberOfBlank</span> <span class="token punctuation">(</span> <span class="token variable">$input</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$regex</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'/_{3,}/'</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">preg_match_all</span> <span class="token punctuation">(</span> <span class="token variable">$regex</span> <span class="token punctuation">,</span> <span class="token variable">$input</span> <span class="token punctuation">,</span> <span class="token variable">$matches</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$numberBlank</span> <span class="token operator">=</span> <span class="token function">count</span> <span class="token punctuation">(</span> <span class="token variable">$matches</span> <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$numberBlank</span> <span class="token operator"><</span> <span class="token number">5</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">true</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token boolean">false</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Validate alpha
1 2 3 4 5 |
<span class="token keyword">function</span> <span class="token function">validateAlpha</span> <span class="token punctuation">(</span> <span class="token variable">$input</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">preg_match</span> <span class="token punctuation">(</span> <span class="token double-quoted-string string">"/^[A-Za-z0-9_- ]+$/"</span> <span class="token punctuation">,</span> <span class="token variable">$input</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Get domain from URL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<span class="token keyword">function</span> <span class="token function">getDomain</span> <span class="token punctuation">(</span> <span class="token variable">$url</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$pattern</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'/https?://(?:[-w]+.)?([-w]+).w+(?:.w+)?/?.*/i'</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">preg_match</span> <span class="token punctuation">(</span> <span class="token variable">$pattern</span> <span class="token punctuation">,</span> <span class="token variable">$url</span> <span class="token punctuation">,</span> <span class="token variable">$matches</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$matches</span> <span class="token punctuation">[</span> <span class="token number">1</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token keyword">null</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> kết quả trả về <span class="token keyword">array</span> <span class="token punctuation">:</span> <span class="token number">2</span> <span class="token punctuation">[</span> ▼ <span class="token number">0</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token double-quoted-string string">"https://viblo.asia/posts/Qbq5QNjGKD8/edit"</span> <span class="token number">1</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token double-quoted-string string">"viblo"</span> <span class="token punctuation">]</span> |
Conclude
So through a few things I have synthesized, I hope to help you understand somewhat more Regex and Regex functions in PHP. Thank you for reading my article.