【发布时间】:2013-04-05 11:39:16
【问题描述】:
我需要对一组用户定义的令牌运行正则表达式。
例如,我有一个这样的字符串:
TOK3 TOK1 TOK2 TOK2 TOK4 TOK3 // 示例字符串
并使用这样的正则表达式:
(TOK1|TOK2)+ // 正则表达式
我想在我的示例字符串中捕获标记序列:TOK1 TOK2 TOK2。
现在,regexp 通常适用于一系列字符,所以我的问题略有不同,因为我的标记不是字符而是字符串。我的令牌可以由两个或多个字符组成。此外,我的软件应该能够检测到示例中的正则表达式与位置 (1, 4) 处的字符串匹配。
目前,我通过将每个标记映射到 ASCII 字母表中的字符并在删除空格后运行正则表达式来解决问题。
但是,我对这个解决方案并不完全满意,我想知道是否有更好的解决方案。谢谢!
编辑
正则表达式中的空格仅用于分隔标记。它们并不意味着标记之间必须有空格。
【问题讨论】:
-
您能否通过示例/代码解释自定义标记的确切含义?像一个字符串集合?
-
基本上模式不是字符序列而是字符串序列。可能正确的术语不是定制的,而是定制的。我很抱歉。但是,每个标记都应该被视为一个原子实体作为一个字符。
-
为什么要先删除空格而不是将它们包含在正则表达式中?
-
因为在我的实现中,我将每个标记映射到一个字符,然后将映射的正则表达式与映射匹配的字符串进行匹配。例如模式
(TOK1|TOK2)+被映射为例如"(a|b)+"。而示例字符串映射到"c a b b d c"。后者,在删除空格之后是"cabbdc"。现在模式可以匹配示例字符串了。
标签: java regex customization