gpt4 book ai didi

regex - Flex 3 正则表达式问题

转载 作者:行者123 更新时间:2023-12-02 02:34:29 28 4
gpt4 key购买 nike

我为我正在从事的项目编写了一个 url 验证器。对于我的要求,它工作得很好,除非 url 的最后一部分超过 22 个字符时它会中断。我的表情:

/((https?):\/\/)([^\s.]+.)+([^\s.]+)(:\d+\/\S+)/i

它期望输入类似于“http(s)://hostname:port/location”。当我给它输入时:

https://demo10:443/111112222233333444445

它有效,但如果我传递输入

https://demo10:443/1111122222333334444455

它坏了。您可以在 http://ryanswanson.com/regexp/#start 轻松测试它.奇怪的是,我无法仅用相关的(我认为)部分 /(:\d+\/\S+)/i 重现该问题。我可以在所需的/之后拥有尽可能多的字符,而且效果很好。有任何想法或已知错误吗?

编辑:以下是演示该问题的示例应用程序的一些代码:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
private function click():void {
var value:String = input.text;
var matches:Array = value.match(/((https?):\/\/)([^\s.]+.)+([^\s.]+)(:\d+\/\S+)/i);
if(matches == null || matches.length < 1 || matches[0] != value) {
area.text = "No Match";
}
else {
area.text = "Match!!!";
}
}
]]>
</mx:Script>
<mx:TextInput x="10" y="10" id="input"/>
<mx:Button x="178" y="10" label="Button" click="click()"/>
<mx:TextArea x="10" y="40" width="233" height="101" id="area"/>
</mx:Application>

最佳答案

我在 RegexBuddy 上调试了您的正则表达式,显然需要数百万步才能找到匹配项。这通常意味着正则表达式存在严重错误。

查看 ([^\s.]+.)+([^\s.]+)(:\d+\/\S+)

1- 看起来您也在尝试匹配子域,但它没有按预期工作,因为您没有转义圆点。如果转义它,demo10:443/123 将不匹配,因为它至少需要一个点。将 ([^\s.]+\.)+ 更改为 ([^\s.]+\.)* 即可。

2- [^\s.]+ 是一个不好的字符类,它会匹配整个字符串并从那里开始回溯。您可以通过使用将在冒号处停止的 [^\s:.] 来避免这种情况。

这个应该可以如你所愿地工作:https?:\/\/([^\s:.]+\.)*([^\s:.]+):\d+\/\S+

关于regex - Flex 3 正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2427710/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com