Skip to content
Advertisement

Regular expressions and matching [closed]

Here is a list of examples of PHP regular expressions examples. Maybe this helps someone, as admin/ or another user can’t make clear that I was trying to share my approaches.

preg_match does the search (preg_replace is a replacer).

preg_match has three parameters – preg_match(FindWhat, FindWhere, GivingOutput);

Example 1):

<?php
    // Everything expect letters and numbers
    $text = 'abc345fg@h';
    $newfilename = preg_match('/[^a-zA-Z0-9.]/', $text, $out);
    echo $out[0];
?>
Output will be:
@

preg_match finds only one result (the firstly found result), with two options: [0] or 1.

Example 2): find everything (any characters,words..) inside our search criteria:

<?php
    $text = 'abcdefghijklmnopqrst';
    $newfilename = preg_match('/ij(.*?)mn/', $text, $out);
    echo $out[0];
    echo $out[1];
?>
[1] -gives only the inner search result (what we had in the brackets,  between "ij" and "mn"):
kl

[0] -gives the whole search result:
ijklmn

(Note, that option 1 is not available if when you don’t use brackets in search criteria (as we have above, in example 1)

Example 3):

If your target text has many same occurrences, like this: $text = ‘Hello user Jimmy Jones, it’s me. Hello user Mery Pawders, it’s still me.’;

Now, here are two different matches, so, we need to use preg_match_all

<?php
    $text = 'Hello user Jimmy Jones, it's me. Hello user Mery Pawders, it's me.';
    $newfilename = preg_match_all('/hello user (.*?) it's/', $text, $out);
    foreach ($out[1] as $found_one) {
        echo $found_one;
    }
    // Or use $out[0] for full search match
?>

Output will be:
Jimmy Jones,
Mery Pawders,

Example 4): search among many possibilities:

<?php
    $text = 'member ACCOUNT7';
    preg_match("/ACCOUNT[123456789]/", $text, $out);
    echo $out[1];
?>

Output will be:
ACCOUNT7

Example 5): To find a string, while input text contains new lines, you must uses at the end;

<?php
    $text = 'one
    two
    three';
    preg_match("/one(.*?)three/s", $text, $out);
    echo $out[1];
?>

Output will be:
two

Example 6): Your search is always case sensitive. To make a case insensitive search, use i at the end (if you want, without s);

<?php
    $text = 'ONE TWO TREE';
    preg_match("/one(.*?)three/si", $text, $out);
    echo $out[1];
?>

Example 7): to search for special characters (like /”.<*’?, etc.) inside preg_match, you need to use this escape sign:

<?php
    $text = 'hello Jimmy/Kroger ';
    preg_match("/Jimmy/Kroger/", $text, $out);
    echo $out[0];
?>

Now, we can use the ^ operator, which searches for results conversely.

Example 8): find everything rather than letters and numbers:

<?php
    $text = 'abc@*&^)($%';
    preg_match_all('/[^a-zA-Z0-9.]/', $text, $out);
    foreach ($out[0] as $varr) {
        echo $varr;
    }
?>
Output will be:
@*&^)($%

For search and replace, we have a bit different structure, as we need to use the new variable.

Example 9): find and replace everything rather than letters and numbers with other character, using this operator: ^

<?php
    $text = 'ab2sq)(&*(%$%^$@%n23f9';
    $variable = preg_replace('/[^a-zA-Z0-9.]/', 'a', $text);
    echo $variable;
?>
Output will be:
ab2sqn23f9

Example 10): search and add something inside the found results:

<?php
    $text = 'Hi, it's me, Niko from Austria';
    $variable = preg_replace('/(Niko.*?) from/', '$1 Gomez', $text);
    echo $variable;
?>
Output will be:

it's me, Niko Gomez Austria

Example 11): find all links inside text:

<?php
    $text = 'hi, my site is http://example.com, and on my page, at http://example.com/page37/blabla.html I wrote something..';
    preg_match_all("/[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]/",$text, $out);
    foreach($out[0] as $varr){
        echo $varr;
    }
?>
Output will be:
http://example.com
http://example.com/page37/blabla.html

Example 12): like the example 11 (but with replace) – find links in text and put them in anchored tags:

<?php
    $text = 'Hi, my site is http://example.com, and on my page, at http://example.com/page37/trid.html I wrote something..';
    $variable = preg_replace("/[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]/",'<a href="\0">\0</a>', $text);
    echo $variable;
?>

Output will be the same sentence, but the links will be anchored.

1) Tips: Do not use preg_match() if you only want to check if one string is contained in another string. Use stristr() or strpos() instead as they will be faster.

2) **More advanced, specific examples about PHP regular expressions, use Google, or see ** full options and manuals at – http://www.php.net/manual/en/reference.pcre.pattern.syntax.php

(You can review shortly all operators list here –
http://www.catswhocode.com/blog/15-php-regular-expressions-for-web-developers
http://www.noupe.com/php/php-regular-expressions.html
)

3) For HTML codes, there exist special light, PHP software, called- DOM Parser. But sometimes, if you know PHP regular expressions well, you might not need a DOM parser.

Advertisement

Answer

Try this regular expression:

/^Shop.*0$/i

This one checks for a Shop at the beginning and a zero at the end.

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement