【问题标题】:How to separate letters, numbers, undescore and dash from string PHP如何从字符串 PHP 中分离字母、数字、下划线和破折号
【发布时间】:2018-11-21 13:58:29
【问题描述】:

我正在尝试像这样拆分字符串:

$string = letters1234_1-someMoreText;

输出应该是:

$string_split [letters1234, 1, someMoreText];

仅当字符串与所需的模式匹配时。

if(preg_match('/^([A-Z]+)([0-9])([_])([0-9])([-])/', $string)) {
       $string_split = preg_split('/^([A-Z]+[0-9]+)([_])([0-9])([-])([A-Z]+[0-9]+)/', $string);
}else{
       $string_split = $string;
}

这似乎比我现在所理解的要复杂得多,但到目前为止被卡住了..

【问题讨论】:

  • Wiktor,这很好用,非常感谢!

标签: php regex string preg-match preg-split


【解决方案1】:

您实际上可以使用您当前的正则表达式(并将.* 添加到它以匹配字符串尾部)与preg_match function 并使用捕获组 来捕获您需要作为结果。在您的情况下,只需检查 preg_match 并找到匹配项后,将找到的捕获分配给 $string_split 变量:

$string = "letters1234_1-someMoreText";
$string_split = $string;
if (preg_match('/^([A-Z]+[0-9]+)_([0-9])-(.*)/si', $string, $matches)) {
    array_shift($matches);
    $string_split = $matches;
}
print_r($string_split);

查看PHP demo 产量

Array
(
    [0] => letters1234
    [1] => 1
    [2] => someMoreText
)

模式详情

  • ^ - 字符串开头
  • ([A-Z]+[0-9]+) - 捕获组 1:一个或多个字母后跟 1+ 个数字
  • _ - 下划线
  • ([0-9]) - 捕获组 2:一个数字
  • - - 一个连字符
  • (.*) - 任何 0+ 个字符

is 修饰符使模式不区分大小写,. 可以匹配换行符。

【讨论】:

    猜你喜欢
    • 2010-09-10
    • 1970-01-01
    • 2015-08-13
    • 2011-08-29
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    相关资源
    最近更新 更多