标题几乎总结了我想要实现的目标。
我有一个字符串,可以包含字母表中的字母,或者数字或字符,如“)”和“*”。它还可以包括由三个点“......”分隔的数字串,例如, “25 ... 123.50”。
此字符串的示例可能是:
peaches* 25...123.50 +("apples")
或-(peaches*) apples* 25...123.50
现在,我想要做的是捕获三个点之前和之后的数字,所以我最终得到了2个变量,25
和123.50
。然后我想修剪字符串,以便最终得到一个排除数字值的字符串:
peaches* +("apples")
或-(peaches*) apples*
基本上是这样的:
$string = 'peaches* 25...123.50 +("apples")';
if (preg_match("/\.\.\./", $string ))
{
# How do i get the left value (could or could not be a decimal, using .)
$from = 25;
# How do i get the right value (could or could not be a decimal, using .)
$to = 123.50;
# How do i remove the value "here...here" is this right?
$clean = preg_replace('/'.$from.'\.\.\.'.$to.'/', '', $string);
$clean = preg_replace('/ /', ' ', $string);
}
如果有人能为我提供关于这项复杂任务的最佳方式的一些意见,我们将不胜感激!欢迎任何建议,意见,建议,反馈或意见,谢谢!
答案 0 :(得分:2)
这个preg_match应该有效:
$str = 'peaches* 25...123.50 +("apples")';
if (preg_match('~(\d+(?:\.\d+)?)\.{3}(\d+(?:\.\d+)?)~', $str, $arr))
print_r($arr);
答案 1 :(得分:1)
伪代码
循环:
在该位置为“...”和 substr 执行 strpos 。然后从该子字符串的末尾(逐个字符)返回,检查每个 is_numeric 或句点。在第一个非数字/非句点出现时,您从原始字符串的开头到该点获取子字符串(暂时存储它)。然后开始检查is_numeric或另一个方向的句点。获取子字符串并将其添加到您存储的其他子字符串。重复。
这不是正则表达式,但它仍将实现同样的目标。
一些php
$my_string = "blah blah abc25.4...123.50xyz blah blah etc";
$found = 1;
while($found){
$found = $cursor = strpos($my_string , "...");
if(!empty($found)){
//Go left
$char = ".";
while(is_numeric($char) || $char == "."){
$cursor--;
$char = substr($my_string , $cursor, 1);
}
$left_substring = substr($my_string , 1, $cursor);
//Go right
$cursor = $found + 2;
$char = ".";
while(is_numeric($char) || $char == "."){
$cursor++;
$char = substr($my_string , $cursor, 1);
}
$right_substring = substr($my_string , $cursor);
//Combine the left and right
$my_string = $left_substring . $right_substring;
}
}
echo $my_string;