2010-09-11 76 views
0

我有几个需要解析的字符串。该字符串应该用胡萝卜字符分隔,但是,如果字符串中允许的字符数达到了最大数量,则省略胡萝卜字符。我需要找到解决这个问题的方法。使用分隔字符串的帮助

这里是一个例子。

规则是在其中最多不能超过13个字符。在下面的字符串中,有一个“S”,应该有一个胡萝卜字符。

MASSYBU HILLSMARY 

这是一个还没有达到13个字符的限制

CYPRUS^TOM 

我该如何处理字符串已达到13个字符的限制不存在定界符作为一个字符串的例子第一个例子?

+0

是一个工作这些字符串在一行中还是被返回字符破坏?我不能说“MASSYBU HILLSMARY”是要变成“MASSYBU HILL ^”还是“MASSYBU HILL ^”和“SMARY”。 – 2010-09-11 03:10:27

+0

瑞安,该字符串应该是,它被分解后,MASSYBU HILLS MARY。这是城市和人的姓氏。 – John 2010-09-11 03:42:46

回答

0

首先将字符串限制为13个字符(例如使用substr),然后查找终止符。那是你在找什么?或者,如果您正在使用indexOf查找字符,请将结果限制为13.它确实取决于您的代码的外观。

编辑:让我把它拼出来。

$Length = Min(strlen($String), 13); 
if (($TerminatorIndex = strpos($String, "^")) !== FALSE) { 
    $Length = Min($Length, $TerminatorIndex); 
} 

return substr($String, 0, $Length); 
+0

我曾计划使用substr,然后向后看分隔符。如果找到了,那么以另一种方式处理。有没有更干净的方式来做到这一点? – John 2010-09-11 02:35:40

+0

添加了一个示例实现。上面的正则表达式实现也很好。 – EboMike 2010-09-11 03:01:50

+0

谢谢Ebo。不幸的是,有时候我需要为我拼写的东西。 :)我相信这会工作得很好。 – John 2010-09-11 03:15:31

0

如果您需要削减多余的字符,你可以做这样的:

$n = 13; 

if(strlen($str) > $n) 
{ 
    //do some alteration example 
    $str = substr($str, 0, $n); 
} 
+0

嘿Nazariy,谢谢你的代码片段。我遇到的问题是,字符串的长度取决于人的城市,名称等等。我不确定这会使我得到我需要的位置。基本上,它看起来像我需要计数块,然后寻找一个胡萝卜字符。如果没有找到胡萝卜字符,那么我将需要在13. – John 2010-09-11 02:40:33

1

看起来像正则表达式

$str = "whatever^abcabcabcabcxABCABCABCABCXDEF^"; 

preg_match_all('~[^^]{1,13}~', $str, $m); 
var_dump($m[0]); 

输出

[0]=> string(8) "whatever" 
    [1]=> string(13) "abcabcabcabcx" 
    [2]=> string(13) "ABCABCABCABCX" 
    [3]=> string(3) "DEF" 
+0

切割字符串嗨stereofrog,感谢代码片段。这看起来很有希望。我打算玩这个,看看我能不能做些事情。我会回来的。再次感谢。 – John 2010-09-11 03:10:07