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