2013-03-25 116 views
1

我是新来的正规表达式。虽然我理解了大部分基础知识,但我很好奇如何从正则表达式中提取变量。我尝试了使用Google搜索,但每次都会变短。正则表达式和变量

我想要做的是从一行正则表达式中解析出任意数量的字符串单词。我的解析器未定义长度或一般的语法。每个单词之间的分隔也是未知的。 Linux的Bash的脚本使用$ {} VARIABLENAME

例子: 用户定义的regex: “[A-ZA-Z0-9] $ {变量1} * $ {}变量2 ... (。 [0-9] +)_ $ {variable3}“

我想让用户定义我要解析出来的字符串的正则表达式。我希望他们设置哪些项目是我关心的变量。我稍后可以验证输入字符串是否与此正则表达式匹配,然后将标记为$ {}的任何内容作为变量提取出来。 后来有一次,我的计划得到了上面的用户定义的正则表达式,它会开始采取字符串输入:

“_hello12_world_randomjunk12345 $#_ wide_123_96584_web!” 此输入将匹配正则表达式,我将能够拉出来: world as variable1 wide as variable2 web as variable3

我的实际问题:正则表达式是否具有处理正则表达式中的变量的一般语法,而不是我上面写的$ {}? $ {}是一个bash脚本的东西,我可以在我的程序中创建它,如果必须的话,我只是想确保我不会重新发明轮子。

+2

你使用什么样的正则表达式?这是什么编程环境?命名捕捉组似乎是你的追求。 – 2013-03-25 19:23:59

+1

你问是否有正则表达式字符串中的变量占位符的约定?如果是这样,答案是否定的。 – MikeM 2013-03-25 19:54:47

+0

我现在在java中使用正则表达式引擎。如果他们证明具有附加功能,其他引擎可以是一个考虑因素。感谢MikeM,这可能会回答我的问题。我可能会最终提供RegEx提供的RegEx模式,并为这类事情创建我自己的协议。 – user1813365 2013-03-25 20:31:57

回答

0

在正则表达式中,要提取的部分称为“组”,并通过用括号括住表达式的适当部分来标识。

从那里,你提取和使用这些值的方式将完全取决于你的语言/库,但搜索组应该会给你后面的内容。

+0

在重新阅读这篇文章时,我不确定现在是否询问访问匹配的部分内容或在表达式的实际构建中使用变量。请澄清,如果不恰当,我会删除我的回复。 – 2013-03-25 19:26:31

+0

表达式的实际构建中的变量。这个想法是我的代码将在用户提供的正则表达式中读取 - 可以用Java说。在我上面的例子中,我的代码将看到正则表达式中有3个变量,所以它将创建字符串变量1,字符串变量2,字符串变量3。然后,当实际字符串通过时,它会将变量1中存在的任何内容放入字符串变量1中。 – user1813365 2013-03-25 19:42:03