Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于将标记转换为BBCode的正则表达式_Php_Regex_Regex Lookarounds_Regex Greedy_Bbcode - Fatal编程技术网

Php 用于将标记转换为BBCode的正则表达式

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

我有一个表单,它接受HTML,将其转换为BBCode并将其存储在数据库中

大多数标记重命名都可以通过简单的开关轻松处理,但是,文本对齐给我带来了一些麻烦

HTML是
,我需要转换成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解析器<代码>
,等等。您希望如何处理所有这些可能性?还有一些库可以为您这样做:这是我遇到的第一个库。
嵌套标记对您的代码来说是一个问题。
是的,它也需要对嵌套标记起作用,但除此之外,解决方案正是我所寻找的。
嵌套标记对您的代码来说是一个问题代码。
是的,它也需要用于嵌套标记,但除此之外,解决方案正是我想要的。