【发布时间】:2011-06-25 00:36:08
【问题描述】:
尝试创建一个忽略正确整数(1、5、999 等)和正斜杠(/)的正则表达式,但在其他所有内容中都找到匹配项。例如,它将找到以下匹配项:
testtest1test-1
但忽略
1557
这是一个模组重写。
【问题讨论】:
-
应该允许浮点数吗?例如
1.337?
标签: regex mod-rewrite
尝试创建一个忽略正确整数(1、5、999 等)和正斜杠(/)的正则表达式,但在其他所有内容中都找到匹配项。例如,它将找到以下匹配项:
testtest1test-1但忽略
1557这是一个模组重写。
【问题讨论】:
1.337?
标签: regex mod-rewrite
[^-0-9\/]+ 应该可以解决问题,我认为。它将匹配任何包含非数字的字符串。
编辑添加了整数中也允许的减号,然后包括问题中提到的正斜杠。
【讨论】:
这是一个非常古老的问题,但我注意到当前接受的答案 ([^-0-9\/]) 不会匹配中间或末尾有破折号/减号 (-) 的数字字符串的任何部分或纯粹由破折号组成。
因此,正则表达式不会在 12-34、1234-、--12、- 或 ----- 等字符串中找到匹配项,即使这些显然不是有效的整数数字,因此应该被抓住。
要将这些包含在正则表达式中,您可以使用如下内容:
[^-0-9]+|[0-9]+(?=-)|^-$|-{2,}
这将匹配
- 的任何数字(使用正向前瞻,注意除开头之外的任何地方都带有破折号的数字)因此,这将在任何不是正整数或负整数的字符串中找到匹配项,另请参阅https://regex101.com/r/8zJwCy/1
如 OP 要求,还包括(或更确切地说不包括)斜杠,可以将它们添加到第一个字符组。
[^-0-9\/]+|[0-9]+(?=-)|^-$|-{2,}
请注意,这也不会匹配纯斜杠系列(/、//、///、...)和整数之间的多个斜杠(1//2、1//-2、//1、@ 987654340@) 可能需要也可能不需要(当前接受的答案行为相同),请参阅https://regex101.com/r/8zJwCy/3
要同时捕获这些,添加另外两个与一系列斜杠匹配的可选组,类似于处理破折号的最后两个组。或者,如果您希望单个斜杠 (/) 有效,只需添加一组类似于最后一个的组,请参阅https://regex101.com/r/8zJwCy/4
[^-0-9\/]+|[0-9]+(?=-)|^-$|-{2,}|\/{2,}
【讨论】:
这将逐行匹配 - 这是您需要的吗?^[0-9\/]*$
【讨论】:
这应该可以完成工作!
^[0-9\/]+$
【讨论】: