[英]Regular expression lookbehind problem
我用
(?<!value=\")##(.*)##
匹配像## MyString ##這樣的字符串,它不是以下形式:
<input type="text" value="##MyString##">
這適用於上述形式,但不適用於:(它仍匹配,不匹配)
<input type="text" value="Here is my ##MyString## coming..">
我試過了:
(?<!value=\").*##(.*)##
沒有運氣。 任何建議都將深表感謝。
編輯:我正在使用PHP preg_match()函數
這不是完美的(這就是HTML解析器的用途),但它適用於絕大多數HTML文件:
(^|>)[^<>]*##[^#]*##[^<>]*(<|$)
這個想法很簡單。 你正在尋找一個不在標簽之外的字符串。 要在標簽之外,與其最接近的前角形支架必須關閉(或者根本沒有支架),並且最接近的一個必須打開(或不打開)。 這假定在屬性值中不使用有角度的括號。
如果您確實關心屬性名稱是“value”,那么您可以匹配:
value\s*=\s*"([^\"]|\\\")*##[^#]*##([^\"]|\\\")*\"
...然后簡單地否定匹配( !preg_match(...)
)。
@OP,你可以在沒有正則表達式的情況下完成。
$text = '<input type="text" value=" ##MyString##">';
$text = str_replace(" ","",$text);
if (strpos($text,'value="##' ) !==FALSE ){
$s = explode('value="##',$text);
$t = explode("##",$s[1]);
print "$t[0]\n";
}
這里至少是一個起點,它適用於給定的例子。
(?<!<[^>]*value="[^>"]*)##(.*)##
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.