如正则表达式中所述,可以使用正则表达式来匹配嵌套模式吗?,则无法创建正则表达式来匹配任意嵌套模式。但是是否有可能创建一种算法,该算法将生成“nestness”的第n级正则表达式?
基本上,我想替换trim(whatever)
为rtrim(ltrim(whatever))
我设法手动创建3个级别(javascript语法):
level[1] = /\(([^()]*)\)/g
level[2] = /\(((?:[^()]*\([^()]*\))*[^()]*)\)/g
level[3] = /\(((?:(?:(?:[^()]*\([^()]*\))*[^()]*)*\((?:(?:[^()]*\([^()]*\))*[^()]*)*\))*[^()]*)\)/g
以下是一些测试数据:
1st(ddd) + 1st(ddd)
2nd(dd(d))
3rd(a(b) + (cd(h) + d(dfas) + zzz))
4th(a(b(c(d))))
8th(a(b(c(d(e(f(g()))))))
我知道在每个级别都[^()]*
需要替换为可以包含括号的不捕获组,但是我不确定如何 将算法推广到第n个级别 …
您可以从理论上更仔细地考虑:嵌套n
深度较深的括号匹配是围绕n-1
深度小于或等于(至少一个正好n-1
)的匹配的括号。
我们可以对正则表达式进行递归定义。让我们X[n]
将其作为用于精确嵌套n
级别Y[n]
的正则表达式,并将其作为包含方括号的字符串的正则表达式,并以任意级别嵌套到n
级别,因此:
X[n] = \( (Y[n-2] X[n-1])+ Y[n-2] \)
Y[n] = [^()]* ( \( Y[n-1] \) [^()]* )*
与Y[0] = X[0] = [^()]*
(无嵌套)和X[1] = \([^()]*\)
。(我尚未打扰非捕获组等的细节,这些空格只是为了便于阅读。)
基于此编写算法应该很容易。
这些新的(较少相互递归)定义的正则表达式变长得多(它们是多项式而不是指数)。
令l[n]
为的长度X[n]
,L[n]
为的长度Y[n]
,然后(常数项只是每个字符中的硬编码字符):
L[n] = 19 + L[n-1] = 19*n + L[0] = 19*n + 6
l[n] = 3 + L[n-2] + l[n-1] + 2 + L[n-2] + 2
= 7 + 2 * L[n-2] + l[n-1]
= -57 + 38 * n + l[n-1]
与适当的初始条件l[0]
和l[1]
。这种形式的递归关系具有二次解,因此仅O(n^2)
。好多了。
(对于其他人,我以前的定义Y[n]
是Y[n] = Y[n-1] | X[n]
;这种额外的递归意味着X
正则表达式的长度为O(2.41^n)
,这很糟糕。)
(的新定义Y
是一个诱人的暗示,即甚至可能存在一种X
线性的书写方式n
。我不知道,而且我觉得X
确切长度的额外限制意味着这是不可能的。)
以下是一些计算上述正则表达式的Python代码,您可以将其转换为javascript,而不会带来太多麻烦。
# abbreviation for the No Parenthesis regex
np = "[^()]*"
# compute Y[n] from Y[n-1]
def next_y(y_n1):
return np + "(?:\(" + y_n1 + "\)" + np + ")*"
# compute X[n] from X[n-1] and Y[n-2]
def next_x(x_n1, y_n2):
return "\((?:" + y_n2 + x_n1 + ")+" + y_n2 + "\)"
# compute [X[n], Y[n], Y[n-1]]
# (to allow us to make just one recursive call at each step)
def XY(n):
if n == 0:
return [np, # X[0]
np, # Y[0]
""] # unused
elif n == 1:
return ["\([^()]*\)", # X[1]
next_y(np), # Y[1]
np] # Y[0]
x_n1, y_n1, y_n2 = XY(n-1) # X[n-1], Y[n-1], Y[n-2]
return [next_x(x_n1, y_n2), # X[n]
next_y(y_n1), # Y[n]
y_n1] # Y[n-1]
# wrapper around XY to compute just X[n]
def X(n):
return XY(n)[0]
# wrapper around XY to compute just Y[n]
def Y(n):
return XY(n)[1]
了解如何在 Dreamweaver 中创建用于控制共享设计元素的页面中的内容的嵌套模板。 嵌套模板是指其设计和可编辑区域都基于另一个模板的模板。嵌套模板对于控制共享许多设计元素的站点页面中的内容很有用,但在各页之间有些差异。例如,基本模板中可能包含更宽广的设计区域,并且可以由站点的许多内容提供者使用,而嵌套模板可能进一步定义站点内特定部分的页面中的可编辑区域。 基本模板中的可编辑区域被传递到嵌套模
问题内容: 说我要制作以下JSON 目前,这就是我实现的方式 似乎应该有一个更好的方法来做到这一点,而不是做更多的事情,然后将它们放置在主体中。有比我正在使用的方法更好的动态构建方法吗? 在此先感谢您的帮助! 问题答案: 如果您处理大量JSON数据,我真的建议您使用Gson或Jackson。这要方便得多,并且两个库都很好地支持与Java对象之间的相互转换(与通过JSONObjects手动构建JSO
我确实有这样的身体- 有人能帮我为这种类型的主体创建一个有效的Avro模式吗。我找到了一个创建类似这样的嵌套模式的示例- }] 当我提供这种模式时,它在下面的行中为我提供了错误- GenericRecord avroRecord=新的GenericData。记录(模式); 错误是-org。阿帕奇。阿夫罗。AvroRuntimeException:不是记录架构:
我有一门java课 在上面的场景中,示例具有子示例,这又是示例列表。此嵌套可以是 n 级。我想实现的是有一个示例列表,即扁平化上面的对象并将所有示例收集到最终列表中(收集所有n级示例)。一个明显的方法是递归。在Java中有什么方法可以更有效地实现它。我尝试了一些java 8概念,但它们不符合要求。
问题内容: 我不太使用php,并且在对象创建方面有些模糊。我需要发出一个发送json的网络服务请求,我想我已经覆盖了那部分。在提交数据之前,我需要创建一个嵌套对象。根据我对基于ecma的脚本语言的经验,我认为这是微不足道的,但是我发现该语法难以导航。我要创建的对象如下。 我已经看到了许多平面对象的示例,但是还没有找到嵌套对象的最小示例。上面对象的php语法是什么?这是在PHP中做的不寻常的事情吗?
我使用的是Apache Beam2.14和Java。 给定如下所示的数据集: 我想返回一个数据集,它只包含计数之和位于前N个countryDs的行,对于每个countryID是前N个sessionID,对于每个sessionID是前N个pageID。 数据集的大小以数十亿行为单位--它将无法容纳在内存中。顺便说一句--数据集驻留在BigQuery中,并尝试在BigQuery中使用DENSE_RAN
问题内容: 我有2个CSV文件:“数据”和“映射”: ‘映射’文件有4列:,,,和。填充所有四个列。 “数据”文件具有这些相同的列,其中填充了列,而其他三列为空白。 我希望我的Python代码来打开这两个文件并为每个数据文件,它的映射,以及从映射文件中值。 我知道只有2列存在时才需要使用dict(需要映射1列),但是当需要映射3列时我不知道如何实现。 以下是我尝试完成的映射的代码: 它返回。 经过