为特定子字符串创建具有“not”条件的Regex表达式


2

我有一个用例,我在字符串中搜索特定的子字符串,如果该特定的字符串包含另一个特定的子字符串,我希望它被拒绝。

例如:

  1. pikachu_is_the_best_ever_in_the_world_go_pikachu
  2. mew_is_the_best_ever_in_the_world_go_mew
  3. raichu_is_the_best_ever_in_the_world_go_raichu

我希望我的正则表达式选择带有“best”一词的字符串而不是“mew”这个词,即第一个和第三个字符串。

我试过结合 ^(.*best).*$^((?!mew).)*$ 在下面的表达式和第二个正则表达式中,只有在字符串的开头出现“mew”时才会忽略单词。

^(.*best)((?!mew).).*$

并尝试过

^((?!mew).)(.*best).*$

所以你在寻找包含string1而不是string2的行?尽量简单明了地写出问题。
Scott


对不起,这是我第一次发帖提问。我正在尝试编写一个正则表达式模式来选择包含最佳单词的字符串,也不包含mew。
Sri.S

那么,你在哪里使用这个正则表达式?在其自己的?还是在一个程序?如果是这样的语言?你能设置吗? if / else 那种语言的语言?简单的解决方案是在另一个if中嵌套一个。
JakeGould

我不能使用if / else,我正在使用的应用程序在其内部逻辑中使用普通正则表达式来查找关键字。
Sri.S

Answers:


4
  • 按Ctrl + F
  • 找什么: ^(?=.*best)(?:(?!mew).)*$
  • 检查包裹
  • 检查正则表达式
  • 不要检查 . matches newline
  • 在文档中搜索

说明:

^           : start of line
(?=         : positive lookahead
  .*        : 0 or more any character but newline
  best      : literally "best"
)           : end lookahead
(?:         : start non capture group
  (?!       : negative lookahead, make sure we don't have 
    mew     : literally "mew"
  )         : end lookahead
  .         : any character but newline
)*          : group may appear 0 or more times
$           : end of line

我不太明白最后一点 . - 为什么需要那里?我希望它能用于匹配另一个char mew - 但即使没有它,它也行不通 mew 是行结束前的最后一件事。
arieljannai

2
@arieljannai:因为你需要匹配那个没有 mew 在字符串中的任何地方,它从行的开头检查没有 mew 后跟1个字符,然后迭代( * )沿着字符串,直到字符串结束。
Toto

@Toto你先生是一个天才,它的工作非常出色。谢谢大家的时间帮助我真的很感激。
Sri.S

@Toto完成。再一次谢谢你。
Sri.S
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.