可能会限制为超前范围/范围

问题描述 投票:-1回答:1

例如,我们可以执行以下操作来检查密码中是否包含数字:

(?=.*\d)

或者如果有一个数字和小写字母:

(?=.*\d)(?=.*[a-z])

这基本上会一直进行到最后,直到检查字符串中是否有字母。

但是,我想知道是否有可能以某种通用的方式限制前瞻性范围。这是一个我希望能说明这一点的基本示例:

start_of_string;
middle_of_string;
end_of_string;

我想使用单个正则表达式来匹配start_of_string +middle_of_string+ end_of_string

是否可以在middle_of_string部分中使用先行/后退不知道前后是什么?即,不知道前/后字符串成分的大小或内容。并将前瞻范围限制为仅包含在字符串的该部分中的内容?

让我们举个例子:

start_of_string = 'start'
middle_of_string = '123'
end_of_string = 'ABC' 

是否可以检查每个部分的内容,但可以限制其范围?

string = 'start123ABC'
# Check to make sure the first part has a letter, the second part has a number and the third part has a capital


((?=.*[a-z]).*) # limit scope to the first part only!!
((?=.*[0-9]).*) # limit scope to only the second part.
((?=.*[A-Z]).*) # limit scope to only the last part.

换句话说,可以将正向查找/向后查找与正则表达式的其他组件“链接”,而不会破坏整个正则表达式吗?

UPDATE

这里是一个例子,希望这对问题会更有用:

START_OF_STRING = 'abc'

其中是否存在“ x”?(?=.*x)==> False

END_OF_STRING = 'cdxoy'

其中是否存在“ y”?(?=.*y)==> True

FULL_STRING = START_OF_STRING + END_OF_STRING
'abcdxoy'

是否有可能以任何方式将两个正则表达式链接在一起以仅在其“子字符串”组件上启动?例如,现在字符串第一部分中的(?=.*x)将返回True,但不应返回。

`((?=.*x)(?=.*y)).*`

我认为对此的简短回答是“不,这是不可能的。”,但我希望能从了解此事的人那里听到来信,以了解其原因。

例如,可以通过以下操作来检查密码中是否包含数字:(?=。* \ d)或是否存在数字和小写字母:(?=。* \ d)(? =。* [az])这基本上会一直进行到“直到...

regex
1个回答
0
投票

在.NET和javascript中,您可以在字符串组件的开头使用正向前行,而在字符串末尾使用负向后行来“约束”匹配。示例:

© www.soinside.com 2019 - 2024. All rights reserved.