这个Bash正则表达式允许不需要的alpha char通过

时间:2017-04-12 03:34:11

标签: regex string bash

目的是允许用户输入适合date --date=的有效日期时间字符串,或输入 - / +天数。如果输入为[+-]?[0-9]+(伪),则匹配,否则失败。

[edit]澄清:匹配是为了进一步处理 - + {天为date的日期时间。一个已经有效的日期时间字符串应该会失败,以避免执行更多处理的&& etc,这就是为什么我只测试数字的原因(不会匹配必须具有'的日期时间。 '或' - '或' /'嵌入式)。

正则表达式是允许(匹配)三种情况:

  • 字符串以' - '
  • 开头
  • 字符串以' +'
  • 开头
  • 字符串只包含数字。

它应该输入像" + a1"。

[[ "${DATETIME}" =~ ^(-|\+)?[0-9]+$ ]] && etc

结果是它错误地匹配" a1"," -a1"和" + a1",但正确地失败了" + a"," aa1"或" 1a"等

单个leading-or-amost-leading alpha char如何匹配正则表达式?

1 个答案:

答案 0 :(得分:0)

遵循正则表达式模式应该:

^([+-]|[[:digit:]]+$)
  • ^()匹配行开头的封闭分组模式(字符串)

  • 在捕获的群组()中,[+-]|[[:digit:]]+$[+-][[:digit:]]+$匹配,即以+-开头的字符串为匹配,并且只包含数字的字符串匹配

再想一想,阅读你的问题对我来说似乎不太清楚,所以我要留下另一个解决方案,如果你想匹配只包含数字的字符串,可以+-在开始时:

^[+-]?[[:digit:]]+$

如果必须存在+-

^[+-][[:digit:]]+$