【问题标题】:Visual Basic - RegEx - Overall Length Check regardless the number of matchesVisual Basic - RegEx - 无论匹配数如何,都检查总长度
【发布时间】:2015-09-22 07:59:40
【问题描述】:

我有以下问题:

这是我的正则表达式:

\d*[a-z A-Z][a-zA-Z0-9 _?!()\/\\]*

它允许除单独的数字之外的任何内容,例如:1、11、111 等。

我的问题:无论匹配如何,如何设置输入的整体长度?

我在每场比赛之前尝试了几个选项,如 {1,30},我将正则表达式放在一个组中,用 ( ) 然后 {1,30} 但它仍然不起作用。

如果有人可以帮助我,我将不胜感激:)。

允许的字符串:

Group1
Group 1
1Group
Group!?()\/
Group !()\?!
a1 a1 a1 a1

不允许:

1
11

等等。 {1,30} 匹配后限制了我可以输入匹配的次数。我想知道的是:如何设置上述正则表达式的最大长度,比如在 30 个字符后,无论匹配如何,都达到输入?

【问题讨论】:

  • 除了数字还有什么?您的正则表达式还应该允许 f??????????
  • 这个问题太模糊了。请提供示例输入和预期输出。
  • RegEx 不能限制“输入”,它只是一个模式匹配引擎。您可以限制“匹配”的长度,但您需要在 将字符串传递给 RegEx 之前使用字符串操作
  • 允许:Group1 |第 1 组 | 1组 |组!?()\/ |团体 !()\?! | a1 a1 a1 a1 |不允许 : 1 | 11 |以此类推 {1,30} 匹配后限制了我可以输入匹配的次数我想知道的是:如何设置上述 RegEx 的最大长度,例如在 30 个字符后达到输入无论比赛如何
  • 是的,我会支持它然后 =) 再次感谢

标签: regex vba


【解决方案1】:

为了禁止仅输入数字字符串,您可以使用负前瞻 (?!\d+$) 并设置输入限制,使用 限制量词 {1,30}

(?!\d+$)[a-zA-Z0-9 _?!()\/\\]{1,30}

demo

请注意,如果您打算匹配整个字符串,则需要锚点:开头的^ 将正则表达式锚定到字符串的开头,$ 将锚定在末尾。

^(?!\d+$)[a-zA-Z0-9 _?!()\/\\]{1,30}$

another demo

【讨论】:

  • 请注意:如果您打算在纯数字输入前后忽略空格,则前瞻 (?!\s*\d+\s*$) 可能会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多