当前位置: 首页 > 面试题库 >

如何确定数字是否为正则表达式的质数?

丁子石
2023-03-14
问题内容

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

public static boolean prime(int n) {
  return !new String(new char[n]).matches(".?|(..+?)\\1+");
}

我不是特别了解Java,但除了正则表达式本身以外,都了解此代码段的所有方面
当您在内置PHP函数中找到它时,我对Regex有了基本的了解。
.?|(..+?)\\1+素数如何匹配?


问题答案:

您说您了解这部分,但仅强调一下,生成的字符串的长度等于提供的数字。因此,当且仅当字符串包含三个字符n == 3

.?

正则表达式的第一部分说:“任何字符,零次或一次”。因此,基本上有零个或一个字符-或,按照我上面提到的,n == 0 || n == 1。如果我们有匹配项,则返回该否定项。这与零和一不是质数这一事实相对应。

(..+?)\\1+

正则表达式的第二部分有些棘手,它依赖于组和反向引用。组是括号中的任何内容,然后由正则表达式引擎捕获并存储以供以后使用。反向引用是一个匹配的组,稍后将在同一正则表达式中使用。

该组捕获1个字符,然后捕获1个或更多字符。(+字符表示一个或多个,但仅表示前一个字符或组。因此,这不是“两个或四个或六个等字符”,而是“两个或三个等。” +?类似于+,但是它会尝试匹配尽可能少的字符。+通常会尝试对整个字符串进行吞噬,这在这种情况下很糟糕,因为这会阻止反向引用部分正常工作。)

下一部分是反向引用:同一组字符(两个或更多)再次出现。所述反向引用出现一次或多次。

所以。捕获的组对应于捕获的自然字符数(从2开始)。然后,所述组出现一些自然的次数(也是从2开始)。如果存在匹配项,则意味着可以找到两个大于或等于2的数字的乘积,该两个数字与n长度的字符串匹配……意味着您有一个复合n。再次返回成功匹配的否定:n不是素数。

如果找不到匹配项,那么您将无法得出两个大于或等于2的自然数的乘积…并且您同时具有不匹配项和素数,因此再次返回否定项比赛结果。

现在看到了吗?这真是令人难以置信的棘手(而且计算量很大!),但是一旦获得它,它同时也很简单。:-)

如果您还有其他问题,例如正则表达式解析的实际工作方式,我可以详细说明。但我现在尝试使这个答案保持简单(或尽可能简单)。



 类似资料:
  • 问题内容: 好的,我的问题不是如何确定数字是否为质数,因为我想我已经知道了,但是更多的是如何使其正确显示。 这是我的代码: 现在我的问题是,如果数字最终等于9,它会说它是质数,而不是。我认为问题在于中断在一个循环后就停止了它,因此它不会递增变量p,因此仅测试除以2(我认为)。但是,如果我删除断点,它将在每次通过时打印出“和不是素数”,直到退出循环为止。不知道该怎么办。 问题答案: 查找数字是否为素

  • 问题内容: 我正在学习正则表达式,我想在Python中使用正则表达式仅定义整数-整数,而不定义小数。 我可以使用来制作一个仅允许数字使用的数字,但也可以使用十进制数字,这是我不想要的: 如何更改代码以 仅 允许整数? 问题答案: 正则表达式基于字符进行工作,表示单个数字…而不是十进制数字。 例如,仅匹配带符号整数的正则表达式可能是 含义 -字符串开始 -可选的(这是什么意思)减号或加号 -一个或多

  • 问题内容: 我有这种模式: 这对于正数很好用,但是我也需要它做负数,例如“ T-1T3T44”应该工作。或者也许使用空格而不是’T’,所以它应适用于这样的字符串:“-1 2 3 2 -1 6 2”。抱歉,我以前没有真正使用过正则表达式。有什么建议吗?谢谢。 问题答案: 您是否想过尝试: 您会注意到我也将(零个或多个)更改为(一个或多个),因为从技术上讲,这不是数字:-)

  • 正则表达式如何匹配出这个字符串'calc(100vh - 420px)'中的数字420

  • 问题内容: 我有一个字符串。如何检查字符串是正则表达式还是包含正则表达式还是正常字符串? 问题答案: 您唯一可以做的可靠检查是,如果语法正确的是正则表达式: 但是请注意,即使对于像和这样的字符串,也会导致这种情况,因为从技术上讲,它们是有效的正则表达式。 唯一会返回的情况是不是有效正则表达式的字符串,例如或或。

  • 假设我想使用正则表达式将字符串1的任意重复次数替换为字符串2的相同重复次数。例如,字符串1=“苹果”,字符串2=“橙色”。 我想象这样的情况: 但是我不知道如何指定N来匹配苹果的重复次数。这可能吗? 注意:正如xhienne所指出的,我正在寻找重复,因此字符串1至少出现两次。 样本输入: Lorem的ipsum dolor坐在那里,奉献给我们,做eiusmod的诱惑偶然或劳动和多洛雷巨型等。苹果U