Php 用于将标记转换为BBCode的正则表达式
我有一个表单,它接受HTML,将其转换为BBCode并将其存储在数据库中 大多数标记重命名都可以通过简单的开关轻松处理,但是,文本对齐给我带来了一些麻烦 HTML是Php 用于将标记转换为BBCode的正则表达式,php,regex,regex-lookarounds,regex-greedy,bbcode,Php,Regex,Regex Lookarounds,Regex Greedy,Bbcode,我有一个表单,它接受HTML,将其转换为BBCode并将其存储在数据库中 大多数标记重命名都可以通过简单的开关轻松处理,但是,文本对齐给我带来了一些麻烦 HTML是,我需要转换成BBcode[right][/right] 因此,我可以很容易地在开始标记上进行str_替换,但对于结束标记,我正在替换,但可以是[/left]、/center]或[/right]。我需要知道开始标记是什么,然后才能设置它,因此出现了问题 我不擅长简单的正则表达式,所以这个更难 从逻辑上讲,我试图做到这一点: $str
,我需要转换成BBcode[right][/right]
因此,我可以很容易地在开始标记上进行str_替换,但对于结束标记,我正在替换,但可以是[/left]、/center]或[/right]。我需要知道开始标记是什么,然后才能设置它,因此出现了问题
我不擅长简单的正则表达式,所以这个更难
从逻辑上讲,我试图做到这一点:
$str = str_replace("</div>","$align_value",$str);
$str=str\u replace(“,”$align\u value“,$str);
但是我需要知道什么是开始标记来设置正确的结束标记
预期结果是,它将检查开始标记是什么:
if($opening_tag = '<div style="text-align: right;">')
{
$closing_tag = '[/right]';
} else if($opening_tag = '<div style="text-align: center;">')
{
$closing_tag = '[/center]';
} else if($opening_tag = '<div style="text-align: left;">')
{
$closing_tag = '[/left]';
} else {
// Some other div that isn't aligned so do nothing
}
if($opening_tag='')
{
$closing_tag='[/right]';
}else if($opening_tag='')
{
$closing_tag='[/center]';
}else if($opening_tag='')
{
$closing_tag='[/left]';
}否则{
//其他未对齐的div,请不要执行任何操作
}
但他们的关键是能够首先找到开头的标签。感谢您的任何帮助使用正则表达式解决此问题可能不是最好的办法。但是,如果您希望这样做,我们希望获得属性值,我猜它将始终为左、右和中,然后收集元素textContents,将其存储在两个捕获组中,然后向其中添加所需的标记,可能类似于:
<.+?:\s+([a-z]+);">(.+?)<\/div>
演示
const regex=/用正则表达式解决这个问题可能不是最好的办法。但是,如果您希望这样做,我们希望获得属性值,我猜它将始终为左、右和中,然后收集元素textContents,将其存储在两个捕获组中,然后向其中添加所需的标记,可能类似于:
<.+?:\s+([a-z]+);">(.+?)<\/div>
演示
const regex=/您不应该为此使用正则表达式,应该使用HTML解析器
、
、
、
,等等。您希望如何处理所有这些可能性?还有一些库可以为您做到这一点:这是我遇到的第一个库。您不应该为此使用正则表达式,而应该使用HTML解析器<代码>
,
,
,
,等等。您希望如何处理所有这些可能性?还有一些库可以为您这样做:这是我遇到的第一个库。嵌套标记对您的代码来说是一个问题。
是的,它也需要对嵌套标记起作用,但除此之外,解决方案正是我所寻找的。嵌套标记对您的代码来说是一个问题代码。
是的,它也需要用于嵌套标记,但除此之外,解决方案正是我想要的。