php Regex替换文本以标记html以字符开头

bvjveswy  于 2023-08-02  发布在  PHP
关注(0)|答案(3)|浏览(91)

我需要把一个文本带到html标签中,像这样:

input: p1: Question 1

output: <h3>Question 1</h3>

字符串
或者也

input: question 1: ¿question 1?

output: <h3>¿question 1?</h3>


我不明白的细节,我有下面的正则表达式规则。

([a-zA-Z])([1-9])(:)+(.*)?


我的结果是

<h3> Question 1</h3>
question 1: ¿question 1?

  • 在第一个示例中,我需要删除<h3>Q之间生成的空间
  • 第二种方法对我完全不起作用

你能帮助我在regex规则中失败的地方吗?

DEMO

wvmv3b1j

wvmv3b1j1#

您可以使用单个捕获组,并将可选的水平空白字符与\h*匹配
在捕获组中,将至少一个非空白字符与\S匹配

[a-zA-Z]+\h*[1-9]:\h*(\S.*)

字符串
Regex demo
在替换中,使用组1的值:

<h3>$1</h3>

u3r8eeie

u3r8eeie2#

regexp需要匹配问题号之前的可选空格(以修复第二个问题)和:之后的可选空格(以修复第一个问题)。

([a-zA-Z]+)\s*([1-9])(:)+\s*(.*)

字符串
DEMO
(.*)之后不需要?。由于.*匹配一个零长度字符串,因此不需要将其标记为可选。
我不太清楚为什么在(:)之后有+--你真的想允许像Question 1:::::这样的东西吗?

6qfn3psc

6qfn3psc3#

答案是,感谢用户@User863

([a-zA-Z ])+([1-9])(:)+\s*(.*)

字符串

相关问题