正则表达式帮助 - PHP - preg_match()

时间:2015-11-18 18:46:27

标签: php regex preg-match

希望我不会因为这件事而受到殴打。我是正则表达式的新手,我知道那里有大量的资源,但我的问题是我想做一些具体的事情,我似乎无法弄清楚如何将表达式拼凑在一起。

说这是我的字符串片段:

  

AudienceTypes =内部; InternallearnerName = Ryan Litwiller;   UNAME = 227812;

我想搜索InternallearnerName=并将=之后的内容存储为半冒号作为变量。

作为preg_match()的替代方案,我尝试使用preg_split分号,array_search(),然后substr()开始使用{{1}}来制定解决方案,但实际上我认为正则表达式是更简单的解决方案。

4 个答案:

答案 0 :(得分:2)

你走了:

<?php
$s='AudienceTypes=Internal; InternallearnerName=Ryan Litwiller; uName=227812;';
preg_match( '/\bInternallearnerName=([^;]+)/', $s, $matches );
echo $matches[1], "\n";

正则表达式:

  • \b表示'字边界',因此与FOOInternallearnerName=...
  • 不匹配
  • ( .. )定义了一个群组;第一对将是1号。
  • [^ .. ]是单个字符,不是(^)以下之一;在这种情况下;。因此,它匹配除 ;之外的任何字符
  • +表示1个或更多。

$matches将存储匹配项。 $matches[0]将存储整个匹配的字符串,$matches[1]将存储第一个组。 ($matches[2]会存储第二个,但正则表达式中只有一个组( .. )

要匹配uName的值,请使用此选项:

preg_match( '/\bInternallearnerName=([^;]+.*?\buName=([^;]+)/', $s, $matches );

此处,$matches[2]将为227812

请注意,在这种情况下,正则表达式的第一个和最后一个字符/仅用于标记正则表达式的开头/结尾。严格来说,他们不是必需的,但这可能是遗产。你也可以在那里使用其他角色;例如,如果您匹配的是网址或文件路径,则可以使用@preg_match( "@.....@", ....)

此外,preg_match如果没有匹配则返回false,因此您应该检查它:

答案 1 :(得分:1)

一些例子

使用preg_match()

$text = "AudienceTypes=Internal; InternallearnerName=Ryan Litwiller; uName=227812;";
preg_match("/InternallearnerName=(.*?);/i",$text,$output);
echo $output[1];

输出:

Ryan Litwiller

您可以选择使用explode()。这很漫长。

$text = "AudienceTypes=Internal; InternallearnerName=Ryan Litwiller; uName=227812;";
$value = explode("InternallearnerName=",$text);
$value = explode(";",$value[1]);
echo $value[0];

输出:

Ryan Litwiller

答案 2 :(得分:1)

正则表达式:

\bInternallearnerName=([^;]+)

这意味着什么:

  • 找一个单词分隔符(非字母字符)
  • 在字符串
  • 中的任意位置找到 InternallearnerName =
  • 开始标记匹配(例如:捕获文本)
  • [] 集合中找到一个或多个 + 字符 ^ 包含分号;
  • 结束标记的匹配

请注意,此操作失败:

InternallearnerName=;

如果您关心这种情况,请将 + (一个或多个)更改为*(零或更多)

答案 3 :(得分:0)

分步工作:

  1. 使用explode(",", $string);:这会创建一个数组。其条目应如下所示:{[0]=> "AudienceTypes=Internal", [1]=>" InternallearnerName=Ryan Litwiller"} ...。注意空格。尽量清理它们。

  2. 继续使用每个数组项,并再次拆分,就像之前一样。然后,再次使用explode()函数,这次explode("=", $array[$arrayItemNum]);

  3. 有关详细信息,请参阅PHP Manual explode() page