[英]Regular Expression Help - PHP - preg_match()
希望我不要对此感到沮丧。 我是regex的新手,我知道那里有大量资源,但是我的问题是我想做一些特定的事情,而我似乎无法弄清楚如何将表达式组合在一起。
说这是我的字符串的摘要:
AudienceTypes =内部; InternallearnerName =瑞安·利特维勒; uName = 227812;
我想搜索InternallearnerName=
,并将InternallearnerName=
之后的内容存储为半冒号作为变量。
作为preg_match()
的替代方法,我尝试开始使用由分号preg_split
, array_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=;
如果您担心这种情况,请将+ (一个或多个)更改为*(零个或多个)
分步工作:
使用explode(",", $string);
:这将创建一个数组。 其条目应类似于: {[0]=> "AudienceTypes=Internal", [1]=>" InternallearnerName=Ryan Litwiller"} ...
注意空格。 尝试清理它们。
继续处理每个数组项,然后像以前一样再次将其拆分。 然后,再次使用explode()
函数,这一次explode("=", $array[$arrayItemNum]);
。
有关更多详细信息,请参见PHP Manual explode()
页面 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.