Php preg_match_all用一个模式搜索两个字符串

时间:2017-12-09 13:26:31

标签: php regex preg-match-all

我有一个这样的字符串:

System.setProperty("webdriver.chrome.driver", "C:/work/chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless", "--disable-gpu", "--print-to-pdf",
            "file:///C:/invoiceTemplate2.html");
WebDriver driver = new ChromeDriver(options);
driver.quit();

或者像这样:

{img:amp.jpg}

我使用php函数preg_match_all获取图像文件名,如" amp.jpg"或alt属性,如"某事"一次,但alt属性是可选的。问题是如何设置一个模式来搜索文件名和alt属性。

最后,我想构建一个html图像标记,如:

{img:amp.jpg alt:something}

2 个答案:

答案 0 :(得分:1)

这会创建标记。未设置alt时,标记中的内容为空。

$re = '/{img:(.*?)(?:}| alt:(.*?)})/';
$str = '{img:amp.jpg alt:something}';
$subst = '<img src="$1" alt="$2" />';

$result = preg_replace($re, $subst, $str, 1);

请参阅https://regex101.com/r/IaPf6Y/2

答案 1 :(得分:0)

作为没有正则表达式的替代方案,您可以:

  • 删除和删除{}等字符,并将:替换为:=,将img替换为src
  • 使用带有空格的explode作为分隔符来创建数组
  • 使用array_map
  • 在数组中的每个项目末尾添加双引号
  • 使用带有空格作为分隔符的implode将数组写回字符串。

这样,如果没有alt属性,则不会显示该属性,您可以根据需要添加更多属性。

$str = "{img:amp.jpg alt:something}";
$str = str_replace(['{', '}', ':', 'img'], ['', '', '="', 'src'], $str);
$str =  sprintf(
    '<img %s>',
    implode(" ", array_map(function($a){return $a . '"';}, explode(' ', $str)))
);

Demo