gpt4 book ai didi

java - 排除正则表达式中的 url 模式

转载 作者:太空宇宙 更新时间:2023-11-04 11:40:02 25 4
gpt4 key购买 nike

这是我的输入字符串

<div>http://google.com</div><span data-user-info="{\"name\":\"subash\", \"url\" : \"http://userinfo.com?userid=33\"}"></span><a href="https://contact.me"></a>http://byebye.com is a dummy website.

对于这种情况,我只需要匹配第一次和最后一次出现的http。因为这些是 html 观点中的innerText。 http 属性值中我们需要忽略。我构建以下正则表达式。

(?<!href=\"|src=\"|value=\"|href=\'|src=\'|value=\'|=)(http://|https://|ftp://|sftp://)

第一次和最后一次出现时工作正常。但这也匹配第二次出现的 http。属性中的链接(http)我们不需要匹配。

仅供引用:我正在尝试负向预测,但这似乎没有帮助。这是具有负前瞻的一种。

(?<!href=\"|src=\"|value=\"|href=\'|src=\'|value=\'|=)(http://|https://|ftp://|sftp://).*?(?!>)

最佳答案

了解更多详细信息后更新

另一种方法是利用正则表达式的“贪婪”。 /(http).*(http)/g 将匹配从第一次出现到最后一次出现的“http”的尽可能多的文本。下面的示例说明了这种行为。 (http) 正在捕获组 - 将其替换为完整的正则表达式。我简化了正则表达式以便于理解。

var text ='<div>http://google.com</div><span data-user-info="{\"name\":\"subash\", \"url\" : \"http://userinfo.com?userid=33\"}"></span><a href="https://contact.me"></a>http://byebye.com is a dummy website.'
var regex = /(http).*(http)/g;
var match = regex.exec(text);
//match[0] is entire matched text
var firstMatch = match[1]; // = "http"
var lastMatch = match[2]; // = "http"

此示例特定于 JavaScript,但 Java 正则表达式(以及许多其他正则表达式引擎)的工作方式相同。 (http).*(http) 也可以。

<小时/>

您的目标是匹配第一行和最后一行或字符串的第一次和最后一次出现吗?

如果前者是正确的,我会先将文本分成几行,然后使用正则表达式匹配第一行和最后一行。

//Split into lines:
var lines = yourMultiLineText.split(/[\r\n]+/g);

如果后者是正确的,则找到与您的基本模式相匹配的所有匹配项,并从匹配数组中取出第一个和最后一个,例如:

//Match using a simpler regex
var matches = yourMultiLineText.match(yourRegex);
//Store the result here
var result;
//Make sure that there are at least 2 matches in total for this to make sense.
if(matches.length > 1){
//Grab the first and the last match.
result = [matches[0], matches[matches.length - 1]];
} else {
result = [];
}

关于java - 排除正则表达式中的 url 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42911330/

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