Регулярные выражения и соответствия

Вот список примеров примеров регулярных выражений php. возможно, это помогает кому-то, поскольку администратор/или другой пользователь не может понять, что я пытался поделиться своими подходами.

preg_match выполняет поиск (preg_replace является заменителем).
preg_match имеет три параметра - preg_match (FindWhat, FindWhere, GivingOutput);

пример 1):

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

preg_match находит только один результат (первый найденный результат) с двумя параметрами: [0] или [1].

пример 2): найти все (любые символы, слова..) внутри наших критериев поиска:

<?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

(Обратите внимание: эта опция [1] недоступна, если вы не используете скобки в критериях поиска (как мы уже указывали выше, в примере 1)

пример 3): если ваш целевой текст имеет много одинаковых событий, например: $ text = 'hello user Джимми Джонс, его я. hello user Mery Pawders, его все еще меня. ';

теперь, вот два разных совпадения, поэтому нам нужно использовать preg_match_all

<?php
$text='hello user Jimmy Jones, its me. hello user Mery Pawders, its me.';
$newfilename=preg_match_all('/hello user (.*?) its/',$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,

пример 4): поиск среди множества возможностей:

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

output will be:
ACCOUNT7

пример 5). Чтобы найти строку, в то время как текст ввода содержит новые строки, вы должны использовать ** s ** в конце;

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

output will be:
two

пример 6). Ваш поиск всегда чувствителен к регистру. Чтобы сделать случай INSENSITIVE, используйте i в конце (если хотите, без s);

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

пример 7): для поиска специальных символов (например,/".<* '? и т.д.) внутри preg_match, вам нужно использовать этот escape знак:\

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

теперь мы можем использовать оператор ^, который ищет результаты обратно.

пример 8): найдите все, а не буквы и цифры:

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

для ПОИСК и ЗАМЕНИТЕ, у нас немного другая структура, так как нам нужно использовать новую переменную.

пример 9): найдите и замените все , а не буквы и цифры другим символом, используя этот оператор: ^

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

пример 10): найдите и добавьте что-то внутри найденных resuls:

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

its me, Niko Gomez Austria

пример 11): найдите все ссылки внутри текста:

<?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

пример 12): как пример 11 (но с заменой) - найдите ссылки в тексте и поместите их в привязанные теги:

<?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;
?>

вывод будет тем же предложением, но ссылки будут привязаны.

1) Советы. Не используйте preg_match(), если вы хотите только проверить, содержится ли одна строка в другой строке. Вместо этого используйте stristr() или strpos(), поскольку они будут быстрее.

2) ** более продвинутые конкретные примеры о регулярных выражениях php, используйте google или см. ** ПОЛНЫЕ ОПЦИИ И РУКОВОДСТВА at - http://www.php.net/manual/en/reference.pcre.pattern.syntax.php

(В скором времени вы можете просмотреть список всех операторов -
 http://www.catswhocode.com/blog/15-php-regular-expressions-for-web-developers
http://www.noupe.com/php/php-regular-expressions.html
 )

3) для hmtl-кодов существует специальный свет, php soft, называемый Dom Parser. но иногда, если вы хорошо знаете регулярные выражения php, вам может не понадобиться синтаксический анализатор.

Ответ 1

Попробуйте это регулярное выражение:

/^Shop.*0$/i

Это проверяет магазин в начале и ноль в конце.

Ответ 2

Я предполагаю, что когда вы говорите "$ email", вы имеете в виду материал перед знаком @. В этом случае вы можете использовать это регулярное выражение:

$email = '[email protected]';
if (preg_match('/^shop.*[email protected]/i', $email) === 1) {
    echo 'Yes!';
}

Вы также можете проверить, используя обычный процедурный код:

$email   = '[email protected]';
$local   = substr($email, 0, strpos($email, '@'));
$amalgam = substr($local, 0, 4) . substr($local, -1);
if (strcasecmp('shop0', $amalgam) === 0) {
    echo "yes";
} else {
    echo "no";
}