【问题标题】:Stumped -- Need advice with regex and preg_replace for PHP 5.3难倒——需要关于 PHP 5.3 的正则表达式和 preg_replace 的建议
【发布时间】:2012-12-13 00:20:19
【问题描述】:

我不知道如何在 PHP(运行 5.3.x)中完成此操作。

我将以下文本字符串从 txt 文件中提取到字符串变量中:

garbage here, more garbage here, more garbage, mor ..., garbage here, more garbage here, more garbage, mor ..., more garbage here, yet more garbage

我试图让字符串看起来像并放回 txt 文件是:

garbage here, more garbage here, more garbage, garbage here, more garbage here, more garbage, more garbage here, yet more garbage

我正在尝试找出一种方法来查找“...”的每个出现,然后删除“...”后面的所有文本,直到它遇到“,”的第一个出现,但没有任何运气。这可以使用带有 preg_replace 函数的正则表达式来完成吗?到目前为止,我只设法删除了第一次出现“,”和“...”之间的所有文本,但这不是我想要的。 :(

“garbage here”字符串中不会有额外的逗号或“...”... 此外,“...”并不总是有尾随“,”。可能只是“这里更多……更多垃圾”

我只有 PHP 可用于此任务。可以做到吗?今天下午我拿起一本正则表达式书,但到目前为止,我还没有找到任何可以完全满足我想要完成的任务。

任何帮助将不胜感激。

【问题讨论】:

  • 请想出一个比“难倒..需要建议”更好的标题。
  • 我很抱歉。下次我会这样做。

标签: php regex


【解决方案1】:

您应该能够使用以下正则表达式:

(^|,)[^,]*\.{3}

用空字符串替换匹配项。

解释:

(^|,)    # match a ',' or at the start of the string
[^,]*    # match any number of characters that are not ','
\.{3}    # match three '.' characters

【讨论】:

  • 请注意,如果字符串的第一个元素包含...,这将留下前导,
  • 这很棒!先生非常感谢您!我有:,(.*?)\.\.\.但这与您所拥有的相差甚远...我需要继续阅读这本正则表达式书!
  • 你在读哪本书的正则表达式?查看我在个人资料Here 上阅读的这两篇文章。 pocket reference 对于任何使用正则表达式的人来说确实是必须的;)
  • Mastering Regular Expressions by Jeffrey E.F. Friedl 是我学习的。到目前为止,我只花了几个小时,但它看起来还不错。谢谢你的建议,我去看看!
【解决方案2】:

除了你的书,看看this tutorial

您可能只匹配... 和尽可能多的非, 字符(我们将使用否定字符类表示)之前和之后(尽可能多,非常简单,因为重复是贪婪的):

$string = preg_replace('/[^,]*[.]{3}[^,]*/', '', $string);

问题现在只是剩下的逗号。我会简单地删除字符串开头或结尾的双 ,, 和逗号:

$string = preg_replace('/^,+|,+(?=,)|,+$/', '', $string);

Working demo.

在一个正则表达式中完成所有操作可能会很棘手,因为您需要处理三种情况:前导元素包含 ...(删除尾随 ,),中心元素包含 ...(删除周围的一个,) 和尾随元素包含 ...(删除前导 ,)。

【讨论】:

  • 感谢您提供在线教程链接。我会读这个。
【解决方案3】:

它非常具体,但应该这样做:

$string = 'garbage here, more garbage here, more garbage, mor ..., garbage here, more garbage here, more garbage, mor ..., more garbage here, yet more garbage';
echo preg_replace('/,[^,]*\.{3}/', '', $string);

【讨论】:

    猜你喜欢
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多