我有一个Big字符串,里面有多个数学运算符。想要在字符串数组中取出所有这些。使用正则表达式找到它们。但正则表达式中缺少一些东西,所以它不会给出任何输出。
MathMls的正则表达式是什么?
示例字符串
查找总和«math xmlns = \“http://www.w3.org/1998/Math/MathML \”»«mroot»«mrow»«mi»#«/ mi »«MI»一个«/ MI»«/ MROW»«MN»3«/ MN»«/ mroot»«莫»=«/月»«mroot»«MROW»«MI»#«/ MI»«MI» b«/ mi»«/ mrow»«mn»3«/ mn»«/ mroot»«/ math»和«math xmlns = \“http://www.w3.org/1998 /数学/ MATHML \“»«MO»=«/月»«MSUP»«mfenced»«MROW»«MI»#«/ MI»«MI信息»b«/ MI»«/ MROW»«/ mfenced»«mfrac »«MN»1«/ MN»«MN»3«/ MN»«/ mfrac»«/ MSUP»«/数学»
从这个得到2个数学
答案 0 :(得分:1)
你不能用Java的正则表达式引擎做到这一点,因为这是有效的输入:
<math>
<apply>
<plus/>
<apply>
<times/>
<ci>a</ci>
<apply>
<power/>
<ci>x</ci>
<cn>2</cn>
</apply>
</apply>
<apply>
<times/>
<ci>b</ci>
<ci>x</ci>
</apply>
<ci>c</ci>
</apply>
</math>
即:可以有任意嵌套标签,Java的正则表达式引擎无法匹配递归模式。您将不得不求助于some parser来处理MathML输入。
我可以将整个事物视为字符串并找到匹配的模式吗?这就是我想要的。并且在另一个标签内不会有任何递归标签。他们将处于同一水平。
在这种情况下,请尝试以下模式:
<math[>\s](?s).*?</math>
或作为字符串文字:
"<math[>\\s](?s).*?</math>"
表示:
<math[>\s] # match `<math` followed by a space or `>`
(?s).*? # reluctantly match zero or more chars (`(?s)` causes `\r`
# and `\n` also to be matched)
</math> # match `</math>`