Php 不是gready regex没有';行不通
正则表达式: 我在Php 不是gready regex没有';行不通,php,regex,preg-match,Php,Regex,Preg Match,正则表达式: 我在(.*)中得到了(.*),这应该会给我预期的Nazwisko: 我做错了什么?/U意味着在贪婪和不贪婪之间切换是反向的:*是不贪婪的,*?是贪婪的。/U意味着在贪婪和不贪婪之间切换是反向的:*是不贪婪的,*?是贪婪的。我看不出有任何理由在这种模式中使用不灵活的量词。请尝试以下方法: Nazwisko : preg_match('~]*>([^' .preg_引号(“”) “~i”,$form_string,$matches); 如果td标记可以包含html内容,则可以替换(
(.*)
中得到了(.*)
,这应该会给我预期的Nazwisko:
我做错了什么?
/U
意味着在贪婪和不贪婪之间切换是反向的:*
是不贪婪的,*?
是贪婪的。/U
意味着在贪婪和不贪婪之间切换是反向的:*
是不贪婪的,*?
是贪婪的。我看不出有任何理由在这种模式中使用不灵活的量词。请尝试以下方法:
Nazwisko :
preg_match('~]*>([^'
.preg_引号(“”)
“~i”,$form_string,$matches);
如果td标记可以包含html内容,则可以替换([^[^原子组)
[^(负前瞻)
)*#关闭原子组,0次或更多次
换句话说,此部分匹配:所有未<或<未后跟/td>的字符,每个字符匹配1次或以上,所有字符匹配0次或以上。
它比(.*)
稍长一点,但效率更高
原因是正则表达式引擎必须测试每个字符(一个接一个)后面是否有ungreedy模式的
。
在我的模式中,正则表达式引擎测试仅当字符是
…)
而不是非捕获组(?:…)
时,如果可能,作为一种良好的实践,您可以找到更多信息。我看不出有任何理由在此模式中使用ungreedy量词。请尝试以下方法:
Nazwisko :
preg_match('~]*>([^'
.preg_引号(“”)
“~i”,$form_string,$matches);
如果td标记可以包含html内容,则可以替换([^[^原子组)
[^(负前瞻)
)*#关闭原子组,0次或更多次
换句话说,此部分匹配:所有未<或<未后跟/td>的字符,每个字符匹配1次或以上,所有字符匹配0次或以上。
它比(.*)
稍长一点,但效率更高
原因是正则表达式引擎必须测试每个字符(一个接一个)后面是否有ungreedy模式的
。
在我的模式中,正则表达式引擎测试仅当字符是
…)
而不是非捕获组(?:…)
时,如果可能,作为一种良好的实践,您可以找到更多信息。为什么preg_quote()
是静态的(并且其中没有正则表达式元字符)?如果您使用HTML解析器而不是正则表达式,这将不会太痛苦。它仅在本例中是静态的;)在脚本中是动态的。为什么preg_quote()
是静态的(并且其中没有正则表达式元字符)?如果您使用HTML解析器而不是正则表达式,这将不会太痛苦。它仅在本例中是静态的;)在脚本中是动态的。以前的td可以包含由包装的标签或一些隐藏的输入等。您可以添加解释吗?我知道?>是后向回望,而?是前向回望的否定,但它是如何协同工作的?@MaciejPyszyński:(?>…)
是一个原子组,(?以前的td可以包含被包装的标签或一些隐藏的输入,等等。你能添加解释吗?我知道?>是向后环顾,是向前环顾的否定,但它是如何一起工作的?@maciejpyszyski:(?>…)
是一个原子组,(?Thx,用于去掉它,但是结果是'/(.*)。preg_quote('''/')。/i'
仍然是一样的。这个例子有些奇怪,我找不到它是什么…Thx,用于去掉它,但是结果是'/(.*)。preg_quote('/'))./i'
还是一样。这个箱子有点奇怪,我找不到它是什么。。。
<input type='hidden' name='uid' value='60431'>Email :</td><td><input type='text' name='email'></td></tr><tr><td align=right>Imi─Ö :</td><td><input type='text' name='imie'></td></tr><tr><td align=right>Nazwisko :
Nazwisko :
preg_match('~<td[^>]*>([^<]*)</td><td[^>]*>'
.preg_quote("<input type='text' name='nazwisko'>")
.'</td>~i', $form_string, $matches);
(?> # atomic group
[^<]+ # all characters expect < one or more times
| # OR
<+(?!/td>) # < one or more times not followed by /td> (negative lookahead)
)* # close atomic group, 0 or more times