【问题标题】:Strip RTF strings with PHP - Regex [duplicate]用 PHP 去除 RTF 字符串 - 正则表达式 [重复]
【发布时间】:2013-06-26 19:08:48
【问题描述】:

我使用的数据库中的一列包含 RTF 字符串,我想使用 PHP 将它们删除,只留下中间的句子。

如果我没记错的话,它是一个 MS SQL 数据库 2005。

从数据库中提取的字符串类型的示例(需要更多告诉我,其余的都相似):

{\rtf1\ansi\ansicpg1252\deff0\deflang2057{\fonttbl{\f0\fnil\fcharset0 Tahoma;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 ASSEMBLE COMPONENTS AS DETAILED ON DRAWING.\lang2057\fs17\par 
}

我希望将其剥离为仅返回:

ASSEMBLE COMPONENTS AS DETAILED ON DRAWING.

现在,我已经成功地为以前的项目去除了 ASP.NET 中的字符,但是我想使用 PHP 来做到这一点。这是我在 ASP.NET 中使用的正则表达式,我可以添加它完美的工作:

"(\{.*\})|}|(\\\S+)"

但是,当我尝试在 PHP 中使用带有 preg_replace 的相同表达式时,它不会删除一半的字符。

那里有正则表达式大师吗?

【问题讨论】:

  • 添加分隔符$string = preg_replace("#(\{.*\})|}|(\\\S+)#", "", $string);
  • 嗯,这似乎已经修复了错误,谢谢,但是它仍然会在字符串前面留下一堆 RTF 字符串,也许它的工作方式与 ASP.NET 不太一样。
  • 我知道,它不会像你想象的那样做。无论如何,您还应该使用\\\\S+ 而不是\\\S+
  • 我的错,在 PHP 中,最好用 4 个斜杠来转义一个反斜杠,而 \S 需要一个斜杠,所以它变成 5 个斜杠:#(\{.*?\})|\}|(\\\\\S+)#
  • 试试this out。由于它是贪婪的,如果它不在同一行,它将匹配所有内容。我会说你很幸运,因为你有换行符,请注意 . 不匹配换行符,除非你使用 s 修饰符。

标签: php regex rtf


【解决方案1】:

使用此代码。它会正常工作的。

$string = preg_replace("/(\{.*\})|}|(\\\S+)/", "", $string);

请注意,我在正则表达式的开头和结尾添加了一个“/”。

【讨论】:

  • @HamZa 是的,你是对的。刚刚编辑了代码。
  • 返回:\viewkind4\uc1\pard\f0\fs17 按照图纸详细说明组装组件。\fs17\par 不完全。我应该补充一点,它上面也有大约 20 个前导和尾随空格。
  • @Charlie 不,它会返回此按照图纸详细说明组装组件。 在此处尝试此代码solmetra.com/scripts/regex/index.php
  • 看来是的,在我的 PHP 应用程序中没有。这可能是什么原因?
  • 请分享您的代码。让我看看你在尝试什么。
猜你喜欢
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多