找到一个特定的字符串相对容易,但我不知道从哪里开始。我需要提取一个每次都不同的字符串,但具有相似的特征。
以下是我需要在段落中找到的一些示例字符串,无论是在开头,结尾还是在中间的某个位置。
7b.9t.7iv.4x
4ir.4i.5i.6t
7ix.7t.4t.0z
正如您所看到的,字符串将始终以数字开头,并且后面最多包含2个字符,并且将始终包含由点分隔的4个八位字节。
如果您需要更多详细信息,请与我们联系。
编辑:
感谢下面的回答,我想出了这个,虽然不漂亮,但我做了我需要的。
$body="test 1f.9t.7iv.4x test 1a.9a.7ab.4xa test ";
$var=preg_match_all("([0-9][a-z]{1,2}\.[0-9][a-z]{1,2}\.[0-9][a-z]{1,2}\.[0-9][a-z]{1,2})",$body,$matches);
$count=count($matches[0]);
$stack = array();
while($count > 0){
$count--;
array_push($stack, "<span id='ip_".$matches[0][$count]."'>".$matches[0][$count]."</span>");
}
$stack=array_reverse($stack);
$body=str_replace($matches[0],$stack,$body);
答案 0 :(得分:4)
您可以使用正则表达式。
这样的事情让你开始。可能有更好的匹配方式,因为它重复了,但....
([0-9][a-z]{1,2}\.[0-9][a-z]{1,2}\.[0-9][a-z]{1,2}\.[0-9][a-z]{1,2})
(
启动捕获组
[0-9]
匹配任何字符0到9
[a-z]
匹配任何字符[a-z]
{1,2}
但只匹配之前的1或2次
\.
匹配文字.
需要\
作为转义,因为.
是一个特殊字符
)
结束捕获组
php和javascript都允许使用正则表达式。
要获得更好的直观表示,您可以查看此工具:http://www.debuggex.com/
如果您需要每个八位字节(作为匹配项),您可以在每个()
周围添加更多括号[0-9][a-z]{1,2}
,然后单独存储这些八位字节。
另请注意,\d
与[0-9]
相同,但我更喜欢后者,因为我觉得它更具可读性。