我有以下代码:
$html = get_data($url);
我想从此代码中提取会话ID,其代码如下:
PHPSESSID = aaabbb123456789;
我想将会话ID(仅ID)存储在var中。我用这个正则表达式:
preg_match('#PHPSESSID=(.+?);#is', $html, $result);
我几乎得到了我想要的东西,但$ result选项卡包含两个字符串。这是var_dump()
:
array(2) { [0]=> string(37) "PHPSESSID=aaabbb123456789;" [1]=> string(26) "aaabbb123456789" }
我希望preg_match()
仅返回ID,如$result[1]
中所示。我应该在正则表达式中改变什么?
由于
答案 0 :(得分:2)
正则表达式匹配的结果列表通常具有第一个结果是整个字符串。 PHP的preg_match()
也保证了这一点:
如果提供匹配,则会填充搜索结果。
$matches[0]
将包含与完整模式匹配的文本,$matches[1]
将具有与第一个捕获的带括号的子模式匹配的文本,依此类推。
因此,您可以安全地将值提取为$result[1]
,而不必担心它可能会发生变化并引发警告。
答案 1 :(得分:1)
你不能改变它,这就是命令的工作方式。
$ result [0]将始终是整个匹配的正则表达式,而之后的每个索引都将对应一个组。
您可以通过不使用组来消除后续索引,如下所示:
CREATE FUNCTION findAge (@dateOfBirth DATE)
RETURNS INT
AS
BEGIN
DECLARE @Age INT;
SET @Age = FLOOR(DATEDIFF(YEAR,@dateOfBirth, GETDATE()));
RETURN @Age;
END
现在,会话ID将始终位于$ result [0]
中preg_match('#(?<=PHPSESSID=)[^;]+#i', $html, $result);
答案 2 :(得分:0)
这并不能完全回答你的问题,但是当涉及字符串处理和解析时,我通常不喜欢在没有必要时使用正则表达式
str_replace("PHPSESSID=", "", str_replace(";", "", $yourString));
除非你的字符串包含超过&#34; PHPSESSID = aaabbb123456789;&#34;