繁体   English   中英

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

[英]Regular Expression Help - PHP - preg_match()

希望我不要对此感到沮丧。 我是regex的新手,我知道那里有大量资源,但是我的问题是我想做一些特定的事情,而我似乎无法弄清楚如何将表达式组合在一起。

说这是我的字符串的摘要:

AudienceTypes =内部; InternallearnerName =瑞安·利特维勒; uName = 227812;

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

作为preg_match()的替代方法,我尝试开始使用由分号preg_splitarray_search()substr()制定出一个解决方案,但实际上认为正则表达式将是一个简单得多的解决方案。

干得好:

<?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的值, uName使用以下命令:

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

在这里, $matches[2]将是227812

请注意,在这种情况下,正则表达式的第一个和最后一个字符/仅用于标记正则表达式的开始/结束。 严格来说,不需要它们,但这可能是遗留的。 您也可以在其中使用其他字符。 例如,如果您要匹配URL或文件路径,则可以使用@preg_match( "@.....@", ....)

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

一些例子

使用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

正则表达式:

\bInternallearnerName=([^;]+)

这意味着什么:

  • 找到一个断字(非字母字符)
  • 在字符串中的任意位置找到InternallearnerName =
  • 开始标记的比赛(例如:捕获文本)
  • 发现一个或更多的从集合[]不含有^分号+字符;
  • 结束标记的比赛

请注意,此操作失败:

InternallearnerName=;

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

分步工作:

  1. 使用explode(",", $string); :这将创建一个数组。 其条目应类似于: {[0]=> "AudienceTypes=Internal", [1]=>" InternallearnerName=Ryan Litwiller"} ... 注意空格。 尝试清理它们。

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

有关更多详细信息,请参见PHP Manual explode()页面

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM