如何编写最终不包含某些字符串的正则表达式。 在我的项目中,他们的名字不以某些字符串结尾的所有类如“controller”和“map”都应该从基类继承。我怎么能用正则表达式做到这一点?
但同时使用
public*.class[a-zA-Z]*(?<!controller|map)$
public*.class*.(?<!controller)$
没有任何匹配案例!!!
答案 0 :(得分:6)
搜索与此匹配的所有文件名:
(?<!controller|map|anythingelse)$
(如果没有其他关键字,请移除|anythingelse
,或者同样附加其他关键字。)
如果你不能使用负面的lookbehinds((?<!
.. )
位),请搜索 not 匹配的文件名:
(?:controller|map)$
如果仍然不起作用(某些IDE中可能没有),请删除?:
部分,它可能会 - 这只是使它成为非捕获组,但这里的差异相当微不足道。
如果您使用的是完整字符串必须匹配的内容,那么您可以使用^.*
前面的任何一个作为前缀。
的更新强>
回应:
但同时使用两个
public*.class[a-zA-Z]*(?<!controller|map)$
public*.class*.(?<!controller)$
没有任何匹配案例!!!
不太确定你在那里尝试使用公共/类的东西,所以试试这个:
public.*class.*(?<!controller|map)$`
.
是一个正则表达式字符,表示“除换行符之外的任何内容”,而*
表示零次或多次。
如果这不是你想要的,请编辑问题并提供更多详细信息。
答案 1 :(得分:2)
根据您的正则表达式实现,您可以使用lookbehind来执行此任务。这看起来像
(?<!SomeText)$
这匹配任何末尾没有“SomeText”的行。如果你不能使用它,表达式
^(?!.*SomeText$).*$
匹配任何不以“SomeText”结尾的非空行。
答案 2 :(得分:1)
你可以编写一个包含两个组的正则表达式,一个由控制器或地图之前的一个或多个字符组成,另一个包含控制器或地图,是可选的。
^(.+)(controller|map)?$
使用它可以匹配您的字符串,如果您使用的正则表达式API中有group()
方法,如果group(2)
为空,则该字符串不包含控制器或地图。
答案 3 :(得分:-1)
检查名称是否与[a-zA-Z] *控制器或[a-zA-Z] *地图不匹配。
答案 4 :(得分:-1)
最后我以这种方式做到了
public.*class.*[^(controller|map|spec)]$
它有效