php5 preg_match的使用

php5 preg_match的使用,php,php-5.6,Php,Php 5.6,我使用php5使用preg_match()来提取match上的数据。之前,我们使用的是php5的较低版本,并且出于同样的目的使用了ereg() 下面是使用ereg的代码: $wedge =shell_exec("iwinfo wlan0 info"); $pattern1='ESSID: "([^\]*)"'; ereg($pattern1, $wedge, $SSID); 因此,$SSID包含AP的SSID 现在我改为preg_match(),但无法提取它。这是一种方式: $wedge =s

我使用php5使用preg_match()来提取match上的数据。之前,我们使用的是php5的较低版本,并且出于同样的目的使用了ereg()

下面是使用ereg的代码:

$wedge =shell_exec("iwinfo wlan0 info");
$pattern1='ESSID: "([^\]*)"';
ereg($pattern1, $wedge, $SSID);
因此,$SSID包含AP的SSID

现在我改为preg_match(),但无法提取它。这是一种方式:

$wedge =shell_exec("iwinfo wlan0 info");
$pattern1='ESSID: "([^\]*)"';
echo preg_match('/$pattern1/', $wedge, $SSID);
有谁能帮助我通过给出字符串的开始和结束来提取完整字符串中的SSID吗

更新:iwinfo wlan0 info的输出如下:

wlan0     ESSID: "Openwrt"
所以我期望$SSID的输出是Openwrt

问候,, Sowmya的手册上说:

preg_match()如果模式与给定主题匹配,则返回1;如果不匹配,则返回0;如果发生错误,则返回FALSE

因此,您的
echo preg_匹配(“/$pattern1/”、$wedge、$SSID)没有做任何有用的事情。现在,PHP也无法识别单引号中的变量(或正则表达式),因此必须将其更改为双引号:

preg_match(“/$pattern1/”,$wedge,$SSID)

$SSID
上尝试一个
var\u dump()
,看看会返回什么。如果它没有返回任何内容,请询问与您的正则表达式相关的新问题

的手册上说:

preg_match()如果模式与给定主题匹配,则返回1;如果不匹配,则返回0;如果发生错误,则返回FALSE

因此,您的
echo preg_匹配(“/$pattern1/”、$wedge、$SSID)没有做任何有用的事情。现在,PHP也无法识别单引号中的变量(或正则表达式),因此必须将其更改为双引号:

preg_match(“/$pattern1/”,$wedge,$SSID)


$SSID
上尝试一个
var\u dump()
,看看会返回什么。如果它没有返回任何内容,请询问与您的正则表达式相关的新问题

您可以检查此代码

$wedge    = shell_exec( "iwinfo wlan0 info" );
$pattern1 = 'ESSID: "([^\]*)"';
$output   =  preg_match( '/$pattern1/', $wedge, $SSID, , PREG_OFFSET_CAPTURE );

print_r( $output );

您可以检查此代码

$wedge    = shell_exec( "iwinfo wlan0 info" );
$pattern1 = 'ESSID: "([^\]*)"';
$output   =  preg_match( '/$pattern1/', $wedge, $SSID, , PREG_OFFSET_CAPTURE );

print_r( $output );
  • 在php中,用单引号包装的文本不会被计算,因此
    '/$pattern1/'
    的字面意思是
    /$pattern1/
    ,而不是
    /ESSID:([^\]*)”/
  • ESSID:([^\]*)”
    是无效的正则表达式:反斜杠是一个转义字符,因此它在
    ]
    之后转义,但通过这种方式,前面的
    [
    保持打开状态。正确的语法是
    [^\]*
    ,它的意思是:“搜索零个或多个字符,除了关闭方括号”,但我不认为你是在寻找这个,看到你的字符串
  • preg_match()
    如果找到匹配项,则返回1;如果未找到匹配项,则返回0;如果模式无效,则返回False。匹配的值不是存储在结果中,而是存储在第三个可选参数数组中
  • 因此,您可以使用以下语法:

    $pattern1 = '/ESSID: "([^"]*)"/';
    preg_match( $pattern1, $wedge, $SSID );
    echo $SSID[1];
    
    输出为:

    Openwrt
    

    解释的模式:

    /
    ESSID:      # literally “ESSID: ”
    "           # double quote
    ([^"]*)     # Group 1: zero-or-more characters except double quote
    "           # double quote
    /
    
    使用非贪婪运算符,可以通过以下方式简化模式:

    /ESSID: "(.*?)"/
    
    (.*)
    的意思是:除了模式中的以下字符(在您的情况下,双引号)之外,零个或多个字符

  • 在php中,用单引号包装的文本不会被计算,因此
    '/$pattern1/'
    的字面意思是
    /$pattern1/
    ,而不是
    /ESSID:([^\]*)”/
  • ESSID:([^\]*)”
    是无效的正则表达式:反斜杠是一个转义字符,因此它在
    ]
    之后转义,但通过这种方式,前面的
    [
    保持打开状态。正确的语法是
    [^\]*
    ,它的意思是:“搜索零个或多个字符,除了关闭方括号”,但我不认为你是在寻找这个,看到你的字符串
  • preg_match()
    如果找到匹配项,则返回1;如果未找到匹配项,则返回0;如果模式无效,则返回False。匹配的值不是存储在结果中,而是存储在第三个可选参数数组中
  • 因此,您可以使用以下语法:

    $pattern1 = '/ESSID: "([^"]*)"/';
    preg_match( $pattern1, $wedge, $SSID );
    echo $SSID[1];
    
    输出为:

    Openwrt
    

    解释的模式:

    /
    ESSID:      # literally “ESSID: ”
    "           # double quote
    ([^"]*)     # Group 1: zero-or-more characters except double quote
    "           # double quote
    /
    
    使用非贪婪运算符,可以通过以下方式简化模式:

    /ESSID: "(.*?)"/
    


    (.*?)
    的意思是:除了模式中的以下字符(在您的例子中,是双引号)之外,零个或多个字符。

    carriell,简单引号不执行PHP。因此,
    “/$pattern1/”
    是按文字解释的。注意:ereg函数使用POSIX语法,preg_match使用PCRE语法。这不一样,
    $SSID
    的值是多少?您的预期结果是什么?请注意,当您使用
    preg_match()
    时,
    $SSID
    将是一个数组,因此您需要从该数组中提取所需数据以获得SSID。您可以添加$wedge的值和$SSID的预期值吗?我已经更新了有关SSID输出的问题。Carrivell,简单的引号不执行PHP。因此,
    “/$pattern1/”
    是按文字解释的。注意:ereg函数使用POSIX语法,preg_match使用PCRE语法。这不一样,
    $SSID
    的值是多少?那么您的预期结果是什么呢?还要注意,当您使用
    preg_match()时,
    $SSID
    将是一个数组
    因此,您需要从该数组中提取所需的数据以获取SSID。能否将$wedge的值和$SSID的预期值相加?我已更新了有关SSID输出的问题。我收到以下错误:警告:preg_match():编译失败:缺少偏移量为16的字符类的终止]您可以通过使用反斜杠“\\\”作为前缀来转义结束符
    ]
    。不要这样做。我得到了以下错误:警告:preg\u match():编译失败:缺少终止]对于偏移量为16的字符类,您可以通过在其前面加一个反斜杠“\\”来转义结束符
    ]
    。不要这样做。preg_匹配返回0,这意味着它无法找到字符串。preg_匹配返回0,这意味着它无法找到字符串。非常感谢。它正在工作。感谢您提供php在线工具的链接以及对模式的解释。非常感谢。它正在工作。感谢您提供php在线工具的链接以及对模式的解释。