【发布时间】: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修饰符。