Preg Match返回两个单词在数组中的位置

时间:2019-02-03 16:34:39

标签: php preg-match-all

我正在尝试提取与该结构%HOUSE%%CAR%相抗的.txt文件的所有单词

我使用的是Preg_match,它的工作原理是,但是当我在同一行中有两个单词时,数组将在一个位置返回两个在同一行中的单词

$rawContent = file($_FILES["file"]["tmp_name"]); 
$content = implode(" ",$rawContent);    
preg_match_all("/%.*%/",$content,$arrMatches");

Array ( [0] => %HOSTNAME% [1] => %INTERFAZ_LAN% [2] => %IP_LAN% %MASK_LAN% [3] => %ID_INTERFACE_WAN% )

在位置[2]中有两个词 我认为这是我的preg match表达式的问题,我需要添加一些

1 个答案:

答案 0 :(得分:1)

默认情况下,使用*字符的正则表达式将是“贪婪的”,这意味着它将匹配尽可能多的字符。在这种情况下,表达式.*IP_LAN% %MASK_LAN匹配。

要将此行为更改为非贪婪(即尽可能少地匹配字符),请在星号后添加问号,以便您的模式变为/%.*?%/

或者,您可以更改方法,而不是多次匹配 any 字符,而可以多次匹配除百分号之外的任何字符:{{1 }}。