如何在preg_match
上制作多个string
。我做了一项研究,并能够提出以下解决方案。
<?php
$input = '@Hello@ & Good Day ~World~';
$regex = '/
~
(.*?)
~
/six';
$input_new = preg_replace($regex,'<i>$1</i>', $input);
echo $input_new;
以上内容将搜索(~)string(~)
并更改为斜体格式。如何在同一文本中搜索(@)string(@)
并更改为 粗体 格式。
答案 0 :(得分:2)
preg_replace
也可以采用多种模式和替换方式:
<?php
$input = '@Hello@ & Good Day ~World~';
$regexes = array('/~(.*?)~/six',
'/@(.*?)@/six'
);
$replaces = array('<i>$1</i>',
'<b>$1</b>'
);
$input_new = preg_replace($regexes, $replaces, $input);
echo $input_new;
答案 1 :(得分:1)
你做同样的事情,只有这个时间改变到和 到就像这样。否则,只需创建一个函数来执行此操作:
<?php
function transposeBoldItalic($inputString, $embolden="Hello",$italicise="World"){
$result = preg_replace("#(" . preg_quote($embolden) . ")#", "<strong>$1</strong>", $inputString);
$result = preg_replace("#(" . preg_quote($italicise) . ")#", "<em>$1</em>", $result);
return $result;
}
// TEST IT:
$inputString = "Hello & Good Day World";
var_dump(transposeBoldItalic($inputString, "Hello", "World"));
echo(transposeBoldItalic($inputString, "Hello", "World"));
// DUMPS
<strong>Hello</strong> & Good Day <em>World</em>
答案 2 :(得分:1)
@osnapitzkindle答案是正确的,但您也可以使用preg_replace_callback
echo preg_replace_callback('/([@~])(.*?)([@~])/', function ($matches){
return (strpos($matches[1], '@') !== false) ? "<i>{$matches[2]}</i>" : "<b>{$matches[2]}</b>";}, $input
);