繁体   English   中英

PHP正则表达式中的变量

[英]Php regex in variable

正则表达式: /priceSheet\\[1\\]\\[1\\]\\s=\\s\\"\\d{1,3}\\";/

匹配 priceSheet[1][1] = "30"; priceSheet[1][2] = "31"; 字符串 priceSheet[1][1] = "30"; priceSheet[1][2] = "31"; priceSheet[1][1] = "30"; priceSheet[1][2] = "31";

当我使用

preg_match("/priceSheet\[1\]\[1\]\s=\s\"\d{1,3}\";/", $priceSheet, $matches);

它有效,但是

$min = `/priceSheet\[1\]\[1\]\s=\s\"\d{1,3}\";/`

preg_match($min, $priceSheet, $matches); 

没有结果。 为什么是这样? 我正在使用php 7.0。

编辑:所以问题是:当我将正则表达式放在变量中时,为什么它不起作用? 当我按原样使用正则表达式时,它可以工作。

使用preg_match_all而不是preg_match来匹配所有输入。

<?php

$min = "/priceSheet\[1\]\[1\]\s=\s\"\d{1,3}\";/";
$priceSheet = 'priceSheet[1][1] = "30"; priceSheet[1][2] = "31";';
preg_match_all("/priceSheet\[\d\]\[\d\]\s*=\s*\"\d{1,3}\";/", $priceSheet, $matches);
print_r($matches);

输出:

Array
(
    [0] => Array
        (
            [0] => priceSheet[1][1] = "30";
            [1] => priceSheet[1][2] = "31";
        )
)

使用您的模式仅获取priceSheet[1][1] ,将其调整为使用()捕获所需的数字:

$min = "/priceSheet\[1\]\[1\]\s=\s\"(\d{1,3})\";/";    
$priceSheet = 'priceSheet[1][1] = "30"; priceSheet[1][2] = "31";';

preg_match($min, $priceSheet, $matches);
print_r($matches);

然后,您需要$matches[1]

Array
(
    [0] => priceSheet[1][1] = "30";
    [1] => 30
)

似乎其他张贴者没有费心去解释您为什么会遇到这种麻烦-这是实际的问题。

您正在使用:

||-------||----- escaped double quotes

$min = `/priceSheet\[1\]\[1\]\s=\s\"\d{1,3}\";/`

^---- back-ticks ------------------------^^---no semicolon

您应该仅在php中的字符串上使用单引号或双引号,而不应使用反引号。 反引号是(我的头顶)mysql列名称和shell命令。 当我尝试在http://sandbox.onlinephpfunctions.com/上运行您的反引号行时,它说:

警告 :出于安全原因,shell_exec()已被禁用...”

如果用双引号重新包装正则表达式模式,那么一切都会变得很美好,因为该模式中的双引号已被转义。

新代码:

"$min = "/priceSheet\[1\]\[1\]\s=\s\"\d{1,3}\";/";

接下来,我想知道您在AbraCadaver的回答下发表的评论。

谢谢,但是我真的只需要匹配priceSheet [1] [1]

这是否意味着您仅在检查输入字符串中是否存在该子字符串? 如果这是真的,那么正则表达式解决方案就显得过头了,只需使用strpos()这样:

$priceSheet='priceSheet[1][1] = "30"; priceSheet[1][2] = "31";';
if(strpos($priceSheet,'priceSheet[1][1]')!==false){
    echo "found";
}else{
    echo "not found";
}
// output: found

作为最佳实践,当非正则表达式字符串函数可以合理地完成工作时,请始终避免使用正则表达式解决方案。

暂无
暂无

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

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