-1

找到一个特定的字符串相对容易,但我不知道从哪里开始。我需要提取一个每次都不同但具有相似特征的字符串。

以下是我需要在段落中找到的一些示例字符串,无论是在开头、结尾还是在中间的某个地方。

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);
4

1 回答 1

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]匹配任何字符 [az]

{1,2}但只匹配前 1 或 2 次

\.匹配文字需要作为转义,因为. 它是一个特殊字符\.

)结束捕获组

php 和 javascript 都允许使用正则表达式。

要获得更好的视觉表示,您可以查看此工具: http: //www.debuggex.com/

如果您需要每个八位位组本身(作为匹配项),您可以在每个八位位组() 周围添加更多括号[0-9][a-z]{1,2},然后单独存储这些八位位组。

另请注意,这与后者\d相同,[0-9]但我更喜欢后者,因为我发现它更具可读性。

于 2013-04-28T03:06:21.090 回答