php5 preg_match的使用
我使用php5使用preg_match()来提取match上的数据。之前,我们使用的是php5的较低版本,并且出于同样的目的使用了ereg() 下面是使用ereg的代码: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
$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在线工具的链接以及对模式的解释。