Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将读取向量的正则表达式修改为读取矩阵?_Java_Regex_Matrix_Vector_Token - Fatal编程技术网

Java 如何将读取向量的正则表达式修改为读取矩阵?

Java 如何将读取向量的正则表达式修改为读取矩阵?,java,regex,matrix,vector,token,Java,Regex,Matrix,Vector,Token,我有以下正则表达式,可以读取任意大小的数组,如{1.0,2,3,5.4}: "\\{\\s*((-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+(\\s*,\\s*(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+)*\\s*)?\\}" 我如何修改它,使它可以读取任意维度的矩阵,如:{{1.2,3,4},{2,3.4,3}}等?我认为您只需要添加外部大括号,并使用可选逗号重复现有模式: 前缀:{(

我有以下正则表达式,可以读取任意大小的数组,如{1.0,2,3,5.4}:

"\\{\\s*((-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+(\\s*,\\s*(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+)*\\s*)?\\}"

我如何修改它,使它可以读取任意维度的矩阵,如:{{1.2,3,4},{2,3.4,3}}等?

我认为您只需要添加外部大括号,并使用可选逗号重复现有模式: 前缀:{(。 外部的大括号和一个圆括号使现有的正则表达式可以重复

"\\{\\s*((-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+(\\s*,\\s*(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+)*\\s*)?\\}"
附加:,?)+}。 逗号-问号使其成为可选 然后关闭括号,让其重复1次或更多次 最后是末端的外曲括号

将其放在一起并添加所需的转义,以获得:

"\\{(\\{\\s*((-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+(\\s*,\\s*(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+)*\\s*)?\\},?)+\\}"

我认为您只需要添加外部大括号,并使用可选逗号重复现有模式: 前缀:{(。 外部的大括号和一个圆括号使现有的正则表达式可以重复

"\\{\\s*((-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+(\\s*,\\s*(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+)*\\s*)?\\}"
附加:,?)+}。 逗号-问号使其成为可选 然后关闭括号,让其重复1次或更多次 最后是末端的外曲括号

将其放在一起并添加所需的转义,以获得:

"\\{(\\{\\s*((-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+(\\s*,\\s*(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+)*\\s*)?\\},?)+\\}"

为了使其更具可读性,您的正则表达式可以写成

String numRegex = "(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+";
String regex = "\\{\\s*(" + numRegex + "(\\s*,\\s*" + numRegex + ")*\\s*)?\\}";
尽管我确实认为
numRegex
部分是不正确的,因为它允许使用
1/2-3.4/5-6/7等文本

现在你想把它包装在一个
{xxx,xxx,…}
结构中,所以

String regex2 = "\\{\\s*(" + regex + "(\\s*,\\s*" + regex + ")*\\s*)?\\}";
试验

输出

作为一个单独的长正则表达式

"\\{\\s*(\\{\\s*((-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+(\\s*,\\s*(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+)*\\s*)?\\}(\\s*,\\s*\\{\\s*((-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+(\\s*,\\s*(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+)*\\s*)?\\})*\\s*)?\\}"

但是,如果您可以像上面那样拆分和构建它,那么阅读起来就容易多了。

为了让它更具可读性,您的正则表达式可以写成

String numRegex = "(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+";
String regex = "\\{\\s*(" + numRegex + "(\\s*,\\s*" + numRegex + ")*\\s*)?\\}";
尽管我确实认为
numRegex
部分是不正确的,因为它允许使用
1/2-3.4/5-6/7等文本

现在你想把它包装在一个
{xxx,xxx,…}
结构中,所以

String regex2 = "\\{\\s*(" + regex + "(\\s*,\\s*" + regex + ")*\\s*)?\\}";
试验

输出

作为一个单独的长正则表达式

"\\{\\s*(\\{\\s*((-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+(\\s*,\\s*(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+)*\\s*)?\\}(\\s*,\\s*\\{\\s*((-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+(\\s*,\\s*(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+)*\\s*)?\\})*\\s*)?\\}"
但如果你能像上面那样拆分和构建它,阅读起来就容易多了