Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.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
android正则表达式问题_Android_Regex - Fatal编程技术网

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
    {
    字符
  • [^\p{Punct}\p{Space}]+
    -1个或多个不属于
    \p{Punct}
    (标点符号)或
    \p{Space}
    (空白)类的字符重复(
    ++
  • \}
    -a
    }
请注意,如果大括号之间的内容只能包括ASCII字母或数字(在正则表达式中,
[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]+\}