我试图用如下所示的方法解析字符串:
preg_match( "|from:(.*?);|", $string, $match);但是,我发现字符串也可以包含lfrom:和_from:。
下面是字符串的几个示例:
var1:34234;from:website1.com;lfrom:website2.com;var2:343423;lfrom:website1.com;var1:4234234;from:website2.com from:website1.com;_from:website2.com;lfrom:website2.com;var1:43523;
如何仅解析from:(.*?);而不解析lfrom、_from等。
发布于 2012-11-06 19:00:17
我本来想给你解决办法的,但我最好解释一下后面的修饰符。
例如,在regex中,每次“匹配”h时,h都会将1添加到正则表达式所在位置的指针中,因此您不希望“添加”任何东西到指针中。您只想查看from前面是否有一个;\s\b或字符串的开头。你不想与虚空相匹配,因为到处都是空隙!!
所以,举一个例子:(?<a)b,它将匹配一个在它前面有一个a的b。所以它只做了下一个:当一个b找到它之前,如果有一个a,它就匹配正则表达式。
所以..。(?<=[;\s\b]|^)from:(\w+\.\w+)将在拥有[;\s\b] OR ^ (The string start)之前匹配一个[;\s\b] OR ^ (The string start)
演示
很容易,哈!?
发布于 2012-11-06 18:51:51
您可以使用断言:
|(?<!l)from:(.*?);|或查找前面的;或行开始:
|(;|^)from:(.*?);|m将一般的.*?匹配替换为[^;]*也可能是个好主意。
发布于 2012-11-06 18:51:19
假设前面的from是空格或;
/[\s\b;]from:([^;]+);/这将只匹配由空格、word边界或;预先插入的;。我也倾向于缩小捕获范围,即[^;]+与[.*?];。
https://stackoverflow.com/questions/13257367
复制相似问题