【问题标题】:Regex - Match Exact (and only exact) string/phrase正则表达式 - 匹配精确(且仅精确)的字符串/短语
【发布时间】:2016-07-23 11:42:38
【问题描述】:

我在使用正则表达式匹配一个只有轻微变化的样本中的精确字符串(并且只有那个字符串,不能包含前缀或后缀)时遇到了一些问题。

我已经查看了与之比较的每个“重复项”,但似乎没有一个解决方案适用于我要解决的问题。如果它确实是重复的,我很想看看如何!

要匹配的短语: Metallica - 木偶大师

示例文本:

Metallica - Master Of Puppets (instrumental)

Metallica - Master Of Puppets

- Metallica - Master Of Puppets

我已经尝试了几种不同的方法。

  • 有“起点”:^(Metallica - Master Of Puppets)$
  • “稍微多一点”:^((?!上帝的羔羊 - 安息).)*$
  • “我快绝望了”:/(?
  • 还有“我没有想法,为什么不呢”:(?=^\s*Metallica - Master Of 木偶)。{29}

其中没有一个会匹配正确的(第二个选项,粗体)字符串。从昨晚开始,我把大部分空闲时间都花在了这个小字符串上,而不是编写一个我一直在开发的新应用程序(我真的很讨厌放弃),而且,在这一点上,出于想法,示例和耐心。尽管如此,我真的很想深入了解这个看似简单的正则表达式需要完成什么,无论是为了应用程序还是为了我的心理健康(我讨厌正则表达式,但喜欢一个很好的挑战)。

注意:我确实需要在 Regex 中完成此操作(不是 grep,不是 java 等)。很抱歉提出这样一个看似微不足道的问题,但我在编程世界的 15 个月左右只能让我到目前为止。期待解决方案,谢谢!5

【问题讨论】:

  • 单词边界? \bMetallica - Master Of Puppets\b?
  • 第二个和第三个文本字符串看起来完全一样(更不用说格式了)。您希望根据什么标准只选取第二个字符串?
  • 我不认为这个问题是重复的,但那是因为我认为它没有意义(即我会投票支持关闭)。
  • 抱歉,格式问题已解决 - 两者之间的区别是第三个之前的“-”。这只是预期变化的一个例子。什么不完全是melpomene?还是我用格式化清理覆盖它?第二个选项是“正确”选项的标准是该示例没有前缀或后缀。 “乐队名称 - 歌曲名称”是格式。除此之外的任何变化都可能导致错误的结果。
  • 没有意义的部分是“我确实需要在 Regex 中完成此操作(不是 grep,不是 java 等)”。您实际使用的是什么语言或工具?

标签: regex string match phrase


【解决方案1】:

我相信您的第一种方法是正确的(与@Dmitry Egorov 一致),尽管您可能缺少多行标志。这将设置它,以便在字符串或文件的每一行的开头和结尾设置 ^$

在 PHP/Js 中你会想要使用

/^Metallica - Master Of Puppets$/gm

g 标志是“全局”并查找所有实例,mflag 是上述多行标志。

其他语言将具有类似的标志或多行支持选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 2018-09-10
    相关资源
    最近更新 更多