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

时间:2009-08-01 13:34:19

标签: regex

这是演示字符串:

  

beforeValueAfter

假设我知道我想要的值是在“之前”和“之后”之间 我想使用正则表达式来取代“价值”....

  

pervious909078375639355544after

假设我知道我想要的值介于“pervious90907”和“55544after”之间 我想使用正则表达式来取代“83756393”....

提前thx。

4 个答案:

答案 0 :(得分:3)

答案取决于两件事:

  • 如果您知道完全该值包含的内容(如果您知道它将是数字等,则会更容易)。如果它可以是任何东西,那么答案就更难了。
  • 如果您的系统默认为贪婪/不合理,则会影响您设置表达式的方式。我会假设它默认是贪婪的。

如果它可以是任何内容(需要将?.*切换为ungreedy,因为“.*”也匹配“之后”:

/before(.*?)After/

如果您知道它是数字:

/before(\d*)After

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

/before(\w*?)After

答案 1 :(得分:0)

试试这个正则表达式:

pervious90907(.*?)55544after

这将为您提供*?pervious90907之间最短的字符串(请注意非贪婪的55544after量词)。

答案 2 :(得分:0)

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

previous([0-9]*)after

答案 3 :(得分:0)

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