1

我需要用户提交关于在哪里爆炸字符串的规则。

假设我们有一个字符串:

$str = "Age: 20 Town: London Country: UK";

假设用户想要字符串的“UK”部分,所以他输入

$input = "Country:";

在这种情况下 :

$output = end(explode($input, $str));

$output would contain: "UK"

如果他想要“伦敦”,我会怎么做?

$str = "Age: 20 Town: London Country: UK";

$part = end(explode('Town:', $str));

$parts = explode('Country: UK', $part);

$parts[0]; -> London

但是,根据explode的用户输入参数执行此操作的最佳方法是什么,我基本上想提供从字符串中剪切某些内容的选项,这必须基于可以重复的规则,以进一步包含包含相同的基本子字符串,例如 Country、Age 等。

编辑1:

我认为我不够清楚,我的错。

基本上,用户输入应针对所需值的范围:

$str = "年龄:20 城镇:伦敦国家:英国"; $userinput = "Town: {some wildcard like #!#} Country:"

我可以使用什么函数/函数组合来获取通配符并返回该位置的子字符串?

编辑2:我进行了实验并找到了解决方案

想要的输出 = 哥本哈根

$string = "Age: 20 Town: Copenhagen Location: Denmark";

$input = "Town: #!# Location:";

$rules = explode('#!#', $input);

$part = explode($rules[0], $string);

$part = explode($rules[1], $part[1]);

echo $part[0]; ->Copenhagen
4

4 回答 4

1

正则表达式的救援:

$field = 'Town';
$re = preg_quote($field, '/');
$matches = array();
preg_match("/$re: ([^ ]*)/", 'Age: 20 Town: London Country: UK', $matches);
echo $matches[1];   # London 

给定两个字段,您可以获得它们之间的任何文本,如下所示:

$matches = array();
preg_match("/Age: (.*) Country:/", 'Age: 20 Town: London Country: UK', $matches);
echo $matches[1];   # 20 Town: London 
于 2013-07-04T17:29:53.067 回答
0

你可以这样做:

$str = 'Age: 20 Town: London Country: UK';
$input = 'Town: #!# Country:';
$parts = explode(' ',$str);
$sides = explode(' #!# ',$input);
$left = $sides[0]; $right = $sides[1];
$length = count($parts);
$output = '';
for($i = 0 ; $i<$length ; $i++) {
    if($parts[$i] == $right) {
        for($j = $i+1 ; $j<$length ; $j++) {
            if($parts[$j]==$left) break;
            $output .= $parts[$j];
        }
    }
}

echo $output;

测试,工作。

输出:

UK
于 2013-07-04T17:36:27.407 回答
0
$search = preg_quote($input, '#');
preg_match("#$search: ([^:]+) #", $str, $matches);
echo $matches[1];

这甚至应该处理输入中的空格

于 2013-07-04T17:30:23.863 回答
0

问题是您的字符串过度使用空格,这使得解析值变得困难。如果可以使用除空格以外的字符来分隔值,操作会更容易。

例如:

$str = 'Age:20,Town:New York,Country:US';
$pairs = explode(',', $str);
$arr = array();
foreach($pairs as $pair) {
    $tmp = explode(':', $pair);
    $arr[$tmp[0]] = $tmp[1];
}
print_r($arr);

输出:

Array
(
    [Age] => 20
    [Town] => New York
    [Country] => US
)
于 2013-07-04T17:33:31.003 回答