如何使用正则表达式提取两个字符串之间的值?

问题描述:

这里是演示字符串:如何使用正则表达式提取两个字符串之间的值?

beforeValueAfter

假定我知道我想要的值之间“之前”和“之后” 我想extact“值”使用正则表达式....

pervious909078375639355544after

Assum e我知道我想要的值是在“pervious90907”和“55544after”之间 我想用“正则表达式”提取“83756393”....

thx提前。

+0

你可以做一个字符串替换的 “pervious90907” 和 “55544after”。你会留下你想要的价值。不需要正则表达式 – ghostdog74 2009-08-02 00:01:10

答案取决于两件事情:

  • 如果你知道确切什么值由(如果你知道这将是数字,等等,它可以更容易)。如果它可以是任何事情,答案会更难一些。
  • 如果您的系统默认为贪婪/非理性,它会影响您设置表达式的方式。我会认为它默认情况下是贪婪的。

如果它可以是任何东西(在将需要切换.*到ungreedy因为“.*”也匹配“后”:

/before(.*?)After/ 

如果你知道它是个数字:

/before(\d*)After 

如果它可以是任何单词字符(0-9,AZ,AZ,_):

/before(\w*?)After 

试试这个正则表达式:

pervious90907(.*?)55544after 

,将让你pervious9090755544after之间的最短字符串(注意非贪婪*?量词)。

+0

如果我想限制结果只是数字,我该怎么办? – Tattat 2009-08-01 13:43:24

+0

用`[0-9]`代替`.`,所以`[0-9] *?`。 – Gumbo 2009-08-01 13:44:11

正则表达式应该是这样的:

previous([0-9]*)after 

 
bash-3.2$ echo pervious909078375639355544after | perl -ne 'print "$1\n" if /pervious90907(.*)55544after/' 
83756393