相关疑难解决方法(0)

如何确定一个数字是否是正则表达式的素数?

我在RosettaCode上找到了以下Java代码示例:

public static boolean prime(int n) {
  return !new String(new char[n]).matches(".?|(..+?)\\1+");
}
Run Code Online (Sandbox Code Playgroud)
  • 我特别不了解Java,但除了正则表达式本身之外,还要理解这个片段的所有方面
  • 当你在内置的PHP函数中找到它时,我有基本的高级Regex知识

如何.?|(..+?)\\1+匹配素数?

java regex primes

126
推荐指数
3
解决办法
3万
查看次数

我们如何匹配^ nb ^ n与Java正则表达式?

这是一系列教育正则表达式文章的第二部分.它显示了向前看符号和嵌套引用如何可以用来匹配非正规languge ñ b ñ.嵌套引用首先介绍在:这个正则表达式如何找到三角形数字?

其中一种原型非常规语言是:

L = { añ bñ: n > 0 }

这是所有非空字符串的语言,由一些数字a后跟相同数量的字符串组成b.在这个语言字符串的例子有ab,aabb,aaabbb.

这种语言可以通过泵浦引理显示为非规则的.它实际上是一种原型上下文无关语言,可以通过无上下文语法 生成S ? aSb | ab.

尽管如此,现代正则表达式实现清楚地认识到的不仅仅是常规语言.也就是说,它们不是形式语言理论定义的"规则".PCRE和Perl支持递归正则表达式,.NET支持平衡组定义.更少的"花哨"特征,例如反向引用匹配,意味着正则表达式不规则.

但这个"基本"功能有多强大?L例如,我们可以用Java正则表达式识别吗?我们也许可以结合lookarounds和嵌套引用,并具有与如工作模式String.matches来匹配字符串一样ab,aabb,aaabbb,等?

参考

相关问题

java regex lookaround capturing-group nested-reference

94
推荐指数
3
解决办法
1万
查看次数

参考 - 这个正则表达式意味着什么?

这是什么?

这是常见问答的集合.这也是社区Wiki,因此每个人都被邀请参与维护.

为什么是这样?

患的是给我泽码型的问题和答案不佳,没有解释.此参考旨在提供质量问答的链接.

范围是什么?

此引用适用于以下语言:,,,,,,.

这可能过于宽泛,但这些语言共享相同的语法.对于特定功能,它背后的语言标签,例如:

  • 什么是正则表达式平衡组?

regex

52
推荐指数
1
解决办法
11万
查看次数

这个Java正则表达式如何检测回文?

这是一系列教育正则表达式文章的第三部分.它遵循这个正则表达式如何找到三角形数字?(首先介绍嵌套引用)和如何将^ nb ^ n与Java正则表达式匹配? (前瞻性"计数"机制进一步详述).这部分介绍了一种特定形式的嵌套断言,当与嵌套引用结合使用时,Java正则表达式可以匹配大多数人认为"不可能"的东西:回文!

回文的语言是非常规的 ; 它实际上是无上下文的(对于给定的字母表).也就是说,现代正则表达式实现不仅仅识别常规语言,Perl/PCRE的递归模式和.NET的平衡组可以很容易地识别回文(参见:相关问题).

但是,Java的正则表达式引擎既不支持这些"高级"功能.然而"某人" (*wink*)成功编写了以下正则表达式,这似乎做得很好(参见ideone.com):

public class Palindrome {
    // asserts that the entirety of the string matches the given pattern
    static String assertEntirety(String pattern) {
        return "(?<=(?=^pattern$).*)".replace("pattern", pattern);
    }

    public static void main(String[] args) {
        final String PALINDROME =
            "(?x) | (?:(.) add)+ chk"
                .replace("add", assertEntirety(".*? (\\1 \\2?)"))
                .replace("chk", assertEntirety("\\2"));

        System.out.println(PALINDROME);
        // (?x) | (?:(.) (?<=(?=^.*? (\1 \2?)$).*))+ (?<=(?=^\2$).*)

        String[] tests …
Run Code Online (Sandbox Code Playgroud)

java regex palindrome lookaround nested-reference

21
推荐指数
1
解决办法
5555
查看次数

方法匹配不好用

我不明白为什么这个正则表达式返回false;

Pattern.matches("\\bi", "an is");
Run Code Online (Sandbox Code Playgroud)

我在角落边界的角色!

java regex

6
推荐指数
2
解决办法
4458
查看次数

是否有正则表达式的风格,允许我计算*和+运算符匹配的重复次数?

是否有正则表达式的风格,允许我计算*+运算符匹配的重复次数?我特别想知道它是否可以在.NET平台下运行.

.net regex repeat matching capturing-group

5
推荐指数
1
解决办法
1222
查看次数

使用正则表达式拆分不同长度的字符串

我不知道这是否可以使用正则表达式.我只是想问一下有人知道答案.

我有一个string ="hellohowareyou??".我需要像这样拆分它

[h, el, loh, owar, eyou?, ?].

完成分割使得第一串具有长度1,第二长度2等等.最后一个字符串将包含剩余的字符.我可以使用像这样的函数在没有正则表达式的情况下轻松完成.

public ArrayList<String> splitString(String s)
    {
        int cnt=0,i;
        ArrayList<String> sList=new ArrayList<String>();
        for(i=0;i+cnt<s.length();i=i+cnt)
        {
         cnt++;
         sList.add(s.substring(i,i+cnt));    
        }
        sList.add(s.substring(i,s.length()));
        return sList;
    }
Run Code Online (Sandbox Code Playgroud)

我只是好奇是否可以使用正则表达式完成这样的事情.

java regex string

3
推荐指数
2
解决办法
2312
查看次数