正则表达式和匹配

时间:2013-04-23 10:17:48

标签: php expression

这里是php正则表达式示例的示例列表。也许这可以帮助某人,正如管理员/或其他用户不清楚,我试图分享我的方法。

preg_match进行搜索(preg_replace是替换者) preg_match有三个参数--preg_match(FindWhat,FindWhere,GivingOutput);

示例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只找到一个结果(第一个找到的结果),有两个选项:[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 ='你好用户吉米琼斯,我的。你好用户 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中搜索特殊字符(如/".<*'等等..),您需要使用此转义符标志:\

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

现在,我们可以使用^运算符,反过来搜索结果。

示例8):找到所有内容而不是字母和数字:

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

对于 SEARCH和REPLACE ,我们的结构有点不同,因为我们需要使用新变量。

示例9):使用此运算符查找并替换所有而不是字母和数字与其他字符:^

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

示例10):在找到的结果中搜索并添加内容:

<?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正则表达式的更高级,具体的例子,使用谷歌,或者看** 完整的选项和手册 - 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正则表达式,你可能不需要dom解析器。

2 个答案:

答案 0 :(得分:1)

试试这个正则表达式:

/^Shop.*0$/i

这一个在开始时检查商店,在结束时检查零。

答案 1 :(得分:1)

我假设,当你说“$ email”时,你的意思是@符号之前的内容。在这种情况下,您可以使用此正则表达式:

$email = 'SHOP_psgarden_0@somewhere.com';
if (preg_match('/^shop.*0@/i', $email) === 1) {
    echo 'Yes!';
}

您还可以使用常规程序代码进行检查:

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