Regex 拒绝特定的正则表达式模式

Regex 拒绝特定的正则表达式模式,regex,Regex,我对正则表达式是相当陌生的,正在尝试匹配 可以有任何长度 可以是字母数字,也可以包含$、-或/ 一行中不能包含两个以上的非字母数字字符,或以/或-结尾 例如,Hello/World有效,Hello//World无效 我尝试了几种不同的可能性,其中最接近我预期的效果: ^--|-/|/-|\s\s|$$|$-|-$|$/|/$|//|([a-zA-Z0-9 -$/])*(?<![/-])$ ^-|-/|/|-| \s\s |$$$$-|-$$$/|/$/|([a-zA-Z0-9-$/]

我对正则表达式是相当陌生的,正在尝试匹配

  • 可以有任何长度
  • 可以是字母数字,也可以包含
    $
    -
    /
  • 一行中不能包含两个以上的非字母数字字符,或以
    /
    -
    结尾
例如,
Hello/World
有效,
Hello//World
无效

我尝试了几种不同的可能性,其中最接近我预期的效果:

^--|-/|/-|\s\s|$$|$-|-$|$/|/$|//|([a-zA-Z0-9 -$/])*(?<![/-])$
^-|-/|/|-| \s\s |$$$$-|-$$$/|/$/|([a-zA-Z0-9-$/])*(?
这似乎对所有场景都足够了,除非两个正斜杠在一起。是否需要转义正斜杠,或者是因为我的匹配表达式太宽并且吞下了坏字符串?我尝试过其他各种具有“负向前看”和“向后看”的表达式,但它们都遇到了问题,特别是对于fal这些是否定的

干杯


Jeff

如果你在正确的道路上出现了负面表情,你只需要加入一个捕获组参考

^([^\$-\/]\;([\$-\/])(?!\2))+?[^\/-]$


此正则表达式对捕获的任何$、-、或/进行负向前瞻。它还有一个惰性量词,以确保它不会覆盖结束/或-的检查。

以下是您要查找的正则表达式:

^(?![^/$-]*[/$-]{2})[\w/$-]+(?<![/-])$
^(?![^/$-]*[/$-]{2})[\w/$-]+(?)?
及

String str1=“Hello/World”;
String str2=“Hello//World”;

String ptrn=“^(?![^/$-]*[/$-]{2}][\\w/$-]+(?您使用的是什么语言/工具?正斜杠不需要转义,除非在使用斜杠作为分隔符时适用,在这种情况下只需更改分隔符或使用/{2}。我的方法是开发一个正则表达式来匹配要排除的每个模式,然后或将它们放在一起,并在前面放一个!以便只有当排除模式都不匹配时才能得到匹配。这将具有以下形式!(r1 | r2 |…| rn)其中r1,r2..rn是要排除的模式的正则表达式。使用Java,但我一直在尝试通过使用RegexPlanet找到我的方法。我将尝试您的建议Tris,看看是否有效。我应该说,这是一个非常有趣的问题!大多数这样的条件通常都是可能的,我使用“向前看”和“向后看”来设置限制你定义的离子。非常感谢你的解释!这非常有效!
String str1 = "Hello/World";
String str2 = "Hello//World";
String ptrn = "^(?![^/$-]*[/$-]{2})[\\w/$-]+(?<![/-])$";
System.out.println(str1.matches(ptrn)); // => true
System.out.println(str2.matches(ptrn)); // => false