比^更有效的正则表达式(?:7+ | 9 + 8?| 8)\ s * $

时间:2015-08-04 19:43:56

标签: regex sas

这是我目前的正则表达式:

^(?:7+|9+8?|8)\s*$

我需要一个与以下字符串匹配的正则表达式模式:

'7'
'777777777777777'
'9'
'99999999999999999999'
'9999999999999998'
'8'
'7 '
'777777777777777 '
'9 '
'99999999999999999999 '
'9999999999999998  '
'8 '

也就是说,我需要一个匹配任何但只有以下内容的正则表达式:

  • 单个7,8或9。
  • 很多7s。
  • 很多9s。
  • 很多9s,最后只有8个。
  • 上面的任何一个,最后都有空格。

我相信我的正则表达式适用于此。有没有更好的正则表达式呢?

我在SAS中使用我的正则表达式,我认为它与Perl口味非常相似。

1 个答案:

答案 0 :(得分:2)

你的正则表达式很好。您可能认为它不是最佳,因为多次交替看起来只是简单或笨重,但看起来就像他们所做的那样。

简单就好了。添加替换,尤其是在使用^和/或$时,几乎不会降低正则表达式的速度,因为如果不需要它们,则不会检查它们。如果您使用正则表达式^(a*|b*)$且字符串为aaaaa,则甚至不会检查b*替换。如果您的字符串为cccc,则会检查第一个ca还是b,因此只有一个字符匹配才能获得b*部分。

减慢正则表达式的作用是充分利用*+之类的量词,类似(b*?a*)*(匹配单个b需要27个步骤)。你的正则表达式没有那样,它是好的和有效的。