RegEx:
^([0-9\.]+)\Q|\E([^\Q|\E])\Q|\E
与字符串不匹配:
1203730263.912|12.66.18.0|
为什么?
答案 0 :(得分:2)
\Q
和\E
可用于忽略模式中的regexp元字符。
\w+\Q.$.\E$
将匹配一个或多个单词字符,后跟文字.$.
并锚定在字符串的末尾。
你的正则表达式应该是,
^([0-9\.]+)\Q|\E([^\Q|\E]*)\Q|\E
OR
^([0-9\.]+)\Q|\E([^\Q|\E]+)\Q|\E
您忘记在+
之后添加[^\Q|\E]
。没有+
,它匹配单个字符。
<强>解释强>
^
起点。([0-9\.]+)
捕获数字或点一次或多次。\Q|\E
在PCRE中,\Q
和\E
称为开始序列。当字符包含在该块中时,它会逐字处理任何字符。因此,该块中的|
符号告诉正则表达式引擎匹配文字|
。([^\Q|\E]+)
捕获任何不属于|
次的字符。\Q|\E
匹配文字管道符号。答案 1 :(得分:1)
接受的答案似乎有点不正确,所以我想为将来的读者解决这个问题。
如果您还不知道,使用\Q
和\E
可确保\Q
... \E
之间的任何字符都按字面匹配,而不是解释为元字符通过正则表达式引擎。
首先,最重要的是,\Q
和\E
不在括号中的字符类[]
中可用。
[^\Q|\E] # Incorrect
[^|] # Correct
其次,你没有用量词跟随那个班级。使用它,正确的语法是:
^([0-9.]+)\Q|\E([^|]+)\Q|\E
尽管如此,将其写成:
更为简单^([0-9.]+)\|([^|]+)\|