Java正则表达式拼图

时间:2017-11-02 09:24:25

标签: java regex

如何使用单个正则表达式来分割Java中的所有以下文本。

<ab>::=<cd> <ef>|<gh>              => ['<ab>', '<cd> <ef>', '<gh>']
<ri>::=hello|nope|we|super         => ['<ri>', 'hello', 'nope', 'we', 'super']
<ri>::= hello | nope  | we |super  => ['<ri>', 'hello', 'nope', 'we', 'super']

3 个答案:

答案 0 :(得分:1)

正如Rawing在评论中所建议的那样,您可以在::=和管道符号上拆分。为了确保你直接修剪空格我建议这样:\s*\|\s*。这将|与包含空格之前和之后的任何数量的空格进行匹配。因此,当拆分时,空格也将被移除。

现在要将它们组合起来,你将它们放在一个捕获组中,然后用or或

分隔它们

(::=|\s*\|\s*)

查看此群组捕获的内容here
绿色标记的部分是分割的部分,“正常”部分是分裂的结果。

答案 1 :(得分:0)

这可以吗?

它只捕捉括号内的单词或单词

/\w+|<\w+>/g

答案 2 :(得分:0)

使用string.split

string.split("\\s*(?:::=|\\|)\\s*")

这会将::=|上的字符串拆分,并覆盖空格。

DEMO