android正则表达式问题
我对这个正则表达式有一个问题:android正则表达式问题,android,regex,Android,Regex,我对这个正则表达式有一个问题: (\{(([^\p{Space}][^\p{Punct}])+)\}) 问题在于字符的数量。如果我输入偶数个字符,它的工作,当奇数-不是。我试图用“?”或“*”替换“+”,但结果仍然相同。我怎样才能解决这个问题 我希望这个正则表达式能够阻止这样的字符串:{%,$#fd}。允许这样做: {F} 或者{F242fFSf23}。反汇编您的正则表达式。。。它只接受介于两者之间的偶数的原因如下: ([^\p{Space}][^\p{Punct}])+ 这基本上意味着:一
(\{(([^\p{Space}][^\p{Punct}])+)\})
问题在于字符的数量。如果我输入偶数个字符,它的工作,当奇数-不是。我试图用“?”或“*”替换“+”,但结果仍然相同。我怎样才能解决这个问题
我希望这个正则表达式能够阻止这样的字符串:{%,$#fd}。允许这样做:
{F} 或者{F242fFSf23}。反汇编您的正则表达式。。。它只接受介于两者之间的偶数的原因如下:
([^\p{Space}][^\p{Punct}])+
这基本上意味着:一些东西不是空格,正好是一个字符,一些东西不是~点,正好是一个字符,这几次。。。所以正好1+正好另一个1正好是2个字符。。。而这几次总是公平的
因此,您可能更想要的是以下内容:
[^\p{Space}\p{Punct}]+
对于上面显示的部分。。。这将导致完整正则表达式的以下结果:
\{[^\p{Space}\p{Punct}]+}
这当然可以进一步简化。现在,它匹配一个
{
,然后是一个或多个重复的2个字符,一个非空格,然后是一个非标点符号,然后是一个}
,因此不能在{…}
之间使用1个字符
要解决此问题,需要使用括号表达式中的两个字符类:
\{[^\p{Punct}\p{Space}]+\}
或
详细信息
-a\{
字符{
-1个或多个不属于[^\p{Punct}\p{Space}]+
(标点符号)或\p{Punct}
(空白)类的字符重复(\p{Space}
)++
-a\}
}
[A-Za-z0-9]+
),您甚至可以使用
\{[A-Za-z0-9]+\}
模式要求是什么?你想配什么?目前,它匹配一个
{
,然后是一个或多个重复的2个字符、一个非空格、一个非标点符号,然后是一个}
,因此不能在{…}之间使用1个字符
当您尝试替换+时,图片中的偶数或奇数是多少?@WiktorStribiżew我试图阻止用户输入这样的字符串:{%F,2}。并且只允许键入:{Ffrgr2443fdfd}尝试{[^\p{Punct}\p{Space}+}
或{[^\p{p}\p{S}\S]+}
甚至{\p{Alnum}+}
或{[A-Za-z0-9]
{WiktorStribi}你太棒了。第一个和第二个正则表达式正在工作。非常感谢。
\{[A-Za-z0-9]+\}