使用PHP更改/编辑标记

使用PHP更改/编辑标记,php,preg-replace,preg-match,Php,Preg Replace,Preg Match,这是我在这里的第一个问题,所以请容忍我-我道歉,如果我没有正确张贴 我已经设法从我们的数据库创建的XML文件中提取了一份工作描述,但是,数据库软件非常旧,它转换了某些 人物 我的问题如下:要点被转换为如下内容: " Production of Monthly Management Accounts and variance analysis<BR> 第一条评论是修复损坏的数据库 除此之外,为什么XML文件或数据库中有格式?如果这是一个XML文件,只需从元素中除去除实际工作描述文

这是我在这里的第一个问题,所以请容忍我-我道歉,如果我没有正确张贴

我已经设法从我们的数据库创建的XML文件中提取了一份工作描述,但是,数据库软件非常旧,它转换了某些 人物

我的问题如下:要点被转换为如下内容:

"   Production of Monthly Management Accounts and variance analysis<BR>

第一条评论是修复损坏的数据库

除此之外,为什么XML文件或数据库中有格式?如果这是一个XML文件,只需从元素中除去除实际工作描述文本以外的所有内容,并让PHP脚本很好地输出它。在上面的例子中,从尾端修剪
,然后通过修剪(““”)来清除任何包含的引号和空格

或者这是一种从数据库获取XML的情况,而编写该部分的人显然不理解XML的用途

编辑: 啊哈。我突然想到了。也许你的意思是,工作描述是一个纯文本的斑点,应该包含的子项实际上都塞进了里面,就像你演示的那样。如果是这样,你将很难做到这一点,因为(在处理非结构化数据时)可能性很大在格式上有一些差异。我认为你最好的选择是使用正则表达式提取“和BR标记之间的所有文本,构建一个数组,并手动检查一些示例。哦,修复数据库。

假设:

  • 以行开头(引号后接3个空格,markdown删除空格)

  • 在这一行的末尾
  • 没有其他变化,也没有分割线
正则表达式:

/^"   (.*)<BR>$/
/^”(.*)
$/
PHP:

$replacedData=preg_replace(“/^”(.*)
$/”,“
  • \1
  • ”,$data);
    正如您所说,内容都集中在一起,您可以尝试以下正则表达式:

    /"   (.*?)<BR>/
    
    /”(.*)
    /
    尽管应该提醒您,如果行恰好包含“quoted”文本,它可能会选择错误的引号

    或者,如果您知道行的结尾为

    (由于降价,删除了3个空格),则可以使用3个替换来获得所需的效果:

    $repData = preg_replace(
                 array( '/<BR>"   /', '<BR>', '"   ' ),
                 array( '</li><li>', '</li></ul>', '<ul><li>' ),
                 $data );
    
    $repData=preg\u replace(
    数组(“/
    ”/”、“
    ”、““”), 数组(“
  • ”、“
    • ”、“
      • ”), 美元(数据);

    同样,这可能会拾取错误的元素,特别是当代码中的其他地方存在

    时。

    假设您已提取到一个变量;为了便于演示,我只设置一个:

    $myVar = '"   Production of Monthly Management Accounts and variance analysis<BR>';
    
    或者这个:

    $cleanedVar = str_replace("<BR>","",trim($myVar,'" '));
    
    $cleanedVar=str_replace(“
    ”,“,trim($myVar,”);
    这两行都会给您一个$cleanedVar的结果


    制作月度管理账目和差异分析

    您在这里的第一个问题是一个很好的例子,许多其他人在发布任何内容之前都应该先看看。。。然而,到目前为止,你尝试了什么?尤其是您的
    preg\u match
    substr\u replace
    解决方案看起来很有趣。也许一个回答者可以继续你的尝试。1项清单是可能的吗?(因此,就在
  • 的一个
    中,我对一个清晰、结构合理的问题投了赞成票:-)我看到了许多关于如何预先替换奇怪字符的问题,它们通常是忽略数据库和脚本使用的字符集的结果。你确定项目符号是被转换的而不是被曲解的吗?我注意到关于修剪的想法,有一点是(对不起,我应该在我的原始帖子中提到这一点)在项目符号上方有一点模糊,简要介绍了工作。因此,如果我修剪所有将从整个描述中删除它们的

    ,是否有办法删除在
  • 之后找到的下一个

    ?我认为,要做到这一点,您肯定需要探索正则表达式函数。你可以做得比编辑你的问题和发布你从数据库中获得的完整标记(可能不止一个例子)以及指定你想要丢失的位和想要保留的位更糟糕。谢谢,我明天会将输出发布到我的原始帖子中!恐怕我对XML的了解非常有限,但如果它被错误地编码和误用,我也不会感到惊讶。我喜欢在“和BR”标签之间拉出文本的想法,我会研究一下,谢谢!嗨,谢谢你的建议,它在一行上运行得非常好。我应该提到(对不起)输出是将所有内容连续地放在一行上,所以这个preg_替换似乎不起作用,有没有一种方式可以说“在每行”(引用)运行preg_replace“”?感谢您的帮助!
    $myVar = '"   Production of Monthly Management Accounts and variance analysis<BR>';
    
    $cleanedVar = strip_tags(trim($myVar,'" '));
    
    $cleanedVar = str_replace("<BR>","",trim($myVar,'" '));