我不确定如何做以下事情......
我需要搜索string
并匹配forward slash
和certain letters
的所有实例。这是用户能够输入的单词修改,我希望他们能够修改单个单词。
这是一个示例字符串
您好,今天天气不是绝对美丽!?
我希望用户能够做的是这样的
你好,今天不是/ bo天气/它很漂亮!?
注意/bo
和/it
我想要做的是使用preg_match
和preg_replace
语句查找并替换/bo
和/it
的实例,并将其转换为html像bolded html tag
和italics html tag
这样的标签(我不能在这里输入它们或者它们会被转换为实际的html。但是在/bo
之后紧跟着这个词,所以在这个例子中它会结束是
Hello, isn't the <b>weather</b> just <i>beautiful</i> today!?
如何使用regex
转换完成后,我会在将数据与预准备语句一起插入数据库之前进行标准清理。
答案 0 :(得分:2)
$string = "Hello, isn't the /bo weather just /it beautiful /bo today!?";
var_dump(preg_replace (array('/\/bo\s(\w+)/', '/\/it\s(\w+)/'), array('<b>$1</b>', '<i>$1</i>'), $string));
&#34;您好,天气 美丽 今天!&#34;
答案 1 :(得分:1)
您可以使用preg_replace_callback
来实现此目的
这基本上为每次发生的匹配调用回调方法
在回调中,您可以根据您的条件进行更换(对于bo的粗体,对于它的斜体,朝向他等)。
像这样的东西 -
$str = "Hello, isn't the /bo weather just /it beautiful today!?";
$regex = "/\/(.*?)\s+(.+?)\b/";
function callback($matches){
$type = $matches[1];
$text = $matches[2];
switch($type){
case "bo":
return "<b>".$text."</b>";
break;
case "it":
return "<i>".$text."</i>";
break;
default:
return $text;
}
}
$resp = preg_replace_callback(
$regex,
"callback",
$str
);
var_dump($resp);
/*
OUTPUT-
Hello, isn't the <b>weather</b> just <i>beautiful</i> today!?
*/
通过检查各种类型和无效类型
,可以进一步扩展此示例答案 2 :(得分:0)
正则表达式
/\/(bo|it)\s+([\S]+)(?=\b)/g
和替换字符串
<$1>$2</$1>
将几乎这样做:
Hello, isn't the <bo>weather</bo> just <it>beautiful</it> today!?
但标签还不是很正确......它们需要是单个字母。 : - (
在此尝试:https://regex101.com/r/oB9gT0/1
<强> 2。编辑 - 有点晚了,但现在可行了:
$str=preg_replace('/\/([bi])((?<=b)o|(?<=i)t)\s+([\w]+)/','<$1>$3</$1>',$str);
现在可以提供正确的结果:
Hello, isn't the <b>weather</b> just <i>beautiful</i> today!?