Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式不能处理类似的字符串_Regex - Fatal编程技术网

Regex 正则表达式不能处理类似的字符串

Regex 正则表达式不能处理类似的字符串,regex,Regex,我正在尝试获取下面提到的字符串的开始和结束标记之间的内容 <a href="./products/" class="link">Products </a> <a href="./servicesandsolutions/" class="link">Services & Solution </a> 使用的正则表达式: <([a-z0-9]+)([^<]+)\*(?:>(.\*?)</\\2>|\\D+

我正在尝试获取下面提到的字符串的开始和结束标记之间的内容

<a href="./products/" class="link">Products </a>

<a href="./servicesandsolutions/" class="link">Services & Solution </a>

使用的正则表达式:

<([a-z0-9]+)([^<]+)\*(?:>(.\*?)</\\2>|\\D+/>)

对于第一个字符串,它可以正常工作,但是对于后面的字符串,它不能正常工作一次

只要去掉标记即可

var str = '<a href="./products/" class="link">Products </a>'
var str2 = '<a href="./servicesandsolutions/" class="link">Services & Solution </a>'
var RE_findOpenAndCloseTag = /^<[^>]+>|<\/[^>]>$/g;

str.replace( RE_findOpenAndCloseTag, '' ) == "Products ";
str2.replace( RE_findOpenAndCloseTag, '' ) == "Services & Solution ";
var str=''
var str2=''
var RE_findopenadclosetag=/^]+>|]>$/g;
str.replace(RE_findopenadclosetag,”)=“产品”;
str2.replace(RE_findopenadclosetag“”)=“服务和解决方案”;
请注意,
RE\u findopenadclosetag
假定标记始终以
,除非它关闭标记。 因此,这将失败。 “>”>这将失败


但更简单的方法是将标记转换为节点,然后获取innerHTML。

通常您不想用正则表达式解析HTML,解析器更擅长于此

假设您使用的是PCRE,下面是对您要查找的表达式的随机猜测:

(?is)<([a-z]+)\b[^<>]*(?:>(.*?)</\1>|/>)
(?is)(.*?|/>)

请注意,这对嵌套标记不起作用。

为什么如此复杂?简单的
/>([^取决于正则表达式的风格-使用lookahead和lookahead方法来获得>和
(?<=>)[^>]*(?=<)
(?)[^>]*(?)=


(?=试试这个,它会解决您的问题(只需添加
|

|)

@LevLevitsky:我认为你的编辑在正则表达式中引入了几个错误。所有的反斜杠是怎么回事?恢复到原来的正则表达式。LevLevitsky,你为什么要对它进行如此重大的更改?一旦我删除了反斜杠,我就让正则表达式风暴抱怨效率低下。可能是因为它不能与第二个正则表达式一起工作,因为它是无效的是较长的-表达式中的低效性导致其超时如何工作良好?我看不出此表达式适用于您的任何示例。是否要获取标记的内容?如第一个示例中的
产品
,第二个示例中的
服务和解决方案
,与
'…还有成千上万的其他情况,是的。但是我们应该(再一次)在正则表达式中重新编写HTML解析器吗-或者只是在这里解决一个简单的具体案例?关键是我们不能在了解所有细节之前完成一项任务。我在这里说过很多次:如果OP不需要通用解决方案,那么尝试构建通用解决方案是没有意义的!迭代预期用例,直到你们都得到我们需要的结果,这要简单得多。+1表示简单,尽管许多流行的正则表达式工具都不支持lookbehind(遗憾的是,Javascript就是其中之一)。。。
<([a-z0-9]+)([^<]+)*(?:>(.*?)|\D+/>|</\1>)