【问题标题】:Find substrings in string where substring encapsulated in specific character在字符串中查找子字符串,其中子字符串封装在特定字符中
【发布时间】:2015-09-23 14:14:40
【问题描述】:

我有一个格式为:

"The quick __grey__ fox jumps over the lazy __brown__ dog."

我想查找和替换双下划线之间的任何单词(或有时是句子)。

我目前在 PHP 中使用 preg_match_all:

$pattern = '/__(.*)__/';

这很好......直到它在同一行上找到两组双下划线,例如在上面的示例中,它根据我的需要匹配“__grey__”和“__brown__”,而且“__grey__ fox 跳过懒惰的棕色__”,我不想要...

所以我的问题是有没有办法只在第一和第二个实例、第三个和第四个实例等之间进行匹配?

如果以前有人问过这个问题,我深表歉意,但我真的不知道如何以足够简洁的方式来表达这个问题以进行有用的搜索!

提前致谢。

【问题讨论】:

  • $pattern = '/__(.*?)__/'; - 使用惰性匹配。已经提出了数千个这样的问题。
  • 谢谢!我确信这不是一个独特的问题,但如果你还不知道答案,就很难找到正确的问题:(
  • 我将发布一个社区 wiki 答案。找不到好的相关帖子。

标签: php regex preg-match-all


【解决方案1】:

要在两个最接近的相同分隔符之间找到一些子字符串,请使用惰性点匹配:

$pattern = '/__(.*?)__/';

demo

要匹配换行符,请使用/s 修饰符:

$pattern = '/__(.*?)__/s';

【讨论】:

  • 完美,谢谢!只要计时器允许,我就会接受这个:)
  • 没关系,我没有为此获得任何声望点。但请接受。
  • 是的,去告诉Jon Skeet。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-13
  • 2021-08-13
  • 2015-10-28
  • 2017-12-04
  • 1970-01-01
相关资源
最近更新 更多