匹配特殊字符之间的数字模式

时间:2013-11-20 05:42:55

标签: regex

我正在尝试编写正则表达式以仅提取数字120068018

!false!|!!|!!|!!|!!|!120068018!|!!|!false!

我对正则表达式比较陌生,我发现这是一项艰巨的任务。

我尝试使用该模式,因为数字始终以1200

开头
'/^1200+!\$/'

但这似乎不起作用。

3 个答案:

答案 0 :(得分:0)

这是您需要的正则表达式:

/[0-9]+/

[0-9] 匹配0到9之间的任何数字

+ 符号表示 1次或更多次

如果您想获得以1200开头的任何数字,那么它将是

/1200[0-9]*/

我在这里使用 * ,因为它允许零或更多。否则,将不会捕获数字1200.

如果你想捕获(提取)字符串,请用括号括起来:

/(1200[0-9]*)/

答案 1 :(得分:0)

使用此:

/1200\d+/

\ d是一个匹配任何数字的元字符。

你的正则表达式不起作用,因为:

  1. ^匹配字符串的开头。你那里没有你的号码。
  2. $匹配字符串的结尾。同样,你的号码在字符串的中间。
    • 适用于前一个字符,元字符或组。所以1200+意味着120,然后是1或更多的零。

答案 2 :(得分:0)

如果您的号码始终以1200开头,则可以

/1200\d*/

这匹配以1200开头的字符串加上“跟随多少数字”。根据您使用的正则表达式的“方言”,您可能会找到

/1200[0-9]*/

更健壮;或

/1200[[:digit:]]*/

更“可读”

任何这些都可以用括号“捕获”。同样,根据方言,您可能需要或不需要逃避这些(在前面添加\)。实施例

echo '||!!||!!||!!120012345||##!!@@!!||' | sed 's/^.*\(1200[0-9]*\).*$/\1/'

产生

120012345

就像你想要的那样。说明:

sed              stream editor command
s                substitute
^.*              everything from start of string until
\(               start capture group
1200             the number 1200
[0-9]*           followed by any number of digits
\)               end capture
.*$              everything from here to end of line
/\1/             and replace with the contents of the first capture group