小编Sti*_*lez的帖子

PHP:将一串交替的字符组拆分成一个数组

我有一个字符串,正确的语法是正则表达式^([0-9]+[abc])+$.所以有效字符串的例子是:'1a2b'或'00333b1119a555a0c'

为清楚起见,字符串是(值,字母)对的列表,并且顺序很重要.我坚持使用输入字符串,所以我不能改变它.虽然使用上面的正则表达式来测试正确的语法似乎很容易,但我正在尝试考虑PHP中最有效的方法将兼容字符串转换为可用的数组,如下所示:

输入:

'00333b1119a555a0c'
Run Code Online (Sandbox Code Playgroud)

输出:

array (
  0 =>  array('num' => '00333', 'let' => 'b'),
  1 =>  array('num' => '1119', 'let' => 'a'),
  2 =>  array('num' => '555', 'let' => 'a'),
  3 =>  array('num' => '0', 'let' => 'c')
)
Run Code Online (Sandbox Code Playgroud)

我在使用preg_match方面遇到了困难.例如,这没有给出预期的结果,意图是在EITHER\d +上贪婪匹配(并保存)OR [abc](并保存),重复直到到达字符串结尾.

$text = '00b000b0b';
$out = array();
$x = preg_match("/^(?:(\d+|[abc]))+$/", $text, $out);
Run Code Online (Sandbox Code Playgroud)

这也不起作用,这里的意图是在\ d + [abc]上贪婪匹配(并保存这些),重复直到字符串到达​​结束,然后将它们分成数字和字母.

$text = '00b000b0b';
$out = array();
$x = preg_match("/^(?:\d+[abc])+$/", $text, $out);
Run Code Online (Sandbox Code Playgroud)

如果使用需要遍历结果2项在时间我计划检查语法作为的preg_match的一部分,然后使用的preg_match输出到贪婪-匹配"块"(或使用使preg_split保持分隔符如果),然后for (...; i+=2)到在他们的对中提取值字母.

但我似乎无法让基本的preg_split()或preg_match()方法顺利运行,更不用说探索是否有"整洁"或更有效的方法.

php regex tokenize regex-greedy

8
推荐指数
1
解决办法
838
查看次数

PHP字符串比较:奇怪的结果,可能的类型杂耍,不明白为什么

我知道数字字符串可能是PHP中的类型,但是我不知道为什么会发生这种情况或给出这个结果:

$a="00010010001101000000101";
$b="00010010001101000000001";

$c = (($a == $b) ? "true" : "false");
$d = (($a === $b) ? "true" : "false");

echo $c . "  " . $d . "\n";  // true false
Run Code Online (Sandbox Code Playgroud)

但是在这种情况下,$ a和$ b的定义方式相同,长度相同,但内容不同,很多字符.($ a == $ b)如何评估为真?

php type-conversion operator-keyword

5
推荐指数
1
解决办法
114
查看次数