在PHP中解析字符串

在PHP中解析字符串,php,Php,如何拆分此行: 我 (代词)我还是我你 (代词)you(第二人称单数);你自己他 (代词)他或他 分成如下三行: 我 (代词)我或我 你 (代词)you(第二人称单数);你自己 他 (代词)他或他 比如说,在每行后面插入标记 谢谢大家! UPD。我的错是,有句点,但这是一个错误。如果您确定格式,可以尝试类似的方法,但如果没有正确的分隔符,这只是猜测,您可能会得到错误的转换 $str = preg_replace("/\s+(\S+\s+\[\S+\])/", "<br />$1",

如何拆分此行:

我 (代词)我还是我你 (代词)you(第二人称单数);你自己他 (代词)他或他

分成如下三行:

我 (代词)我或我

你 (代词)you(第二人称单数);你自己

他 (代词)他或他

比如说,在每行后面插入

标记

谢谢大家!


UPD。我的错是,有句点,但这是一个错误。

如果您确定格式,可以尝试类似的方法,但如果没有正确的分隔符,这只是猜测,您可能会得到错误的转换

$str = preg_replace("/\s+(\S+\s+\[\S+\])/", "<br />$1", $str);
$str=preg\u replace(“/\s+(\s+\s+\[\s+\])/”,“
$1”,$str);
自从您删除这些点后,我们能看到的唯一清晰模式是“一个外来字符、一个空格和一个左括号”

让我们集中关注这一点:

<?php

$string = "我 [wǒ] - (pronoun) I or me 你 [nǐ] - (pronoun) you (second person singular); yourself 他 [tā] - (pronoun) he or him";

$result = preg_replace('/(. \[)/u', // "any char, a space then [", 'u' flag to use UTF8 
                       '<br/>$1', // replace it by a break table and a back reference
                        $string);

echo $result;

如果我的解释是正确的,您想在每个中/日字符之前打断吗

在php手册中,ord函数的注释中有许多关于UTF-8 ord函数的建议/代码。使用此函数,您可以通过字符串逐UTF-8码点迭代UTF-8码点,如果遇到ord为>中文/日文字符开头的码点(字符),请首先插入一个
或其他内容

编辑:ord的文档页面为

这是我认为可能适合你的问题的代码:引用shetline.com的作者kerry的话

这是我对早些时候发表的一篇文章的看法 ord的UTF-8版本,适用于 通过Unicode迭代字符串 价值该函数可以选择 将索引放入字符串中,然后 (可选)返回字节数 被一个角色消耗,所以你 知道增加多少索引 以进入下一个角色



最好按照OP.BTW的要求将\n更改为
,如果有人想使用双引号,则必须转义back引用(否则PHP会认为它是一个变量):“\n\$1”
$string = "我 [wǒ] - (pronoun) I or me 你 [nǐ] - (pronoun) you (second person singular); yourself 他 [tā] - (pronoun) he or him";

// the same pattern, but excluding the one preceded by "^", where the string starts
$result = preg_replace('/(?<!^)(. \[)/u',   
                       '<br/>$1', 
                        $string);

echo $result;
<?php

function ordUTF8($c, $index = 0, &$bytes = null)
{
  $len = strlen($c);
  $bytes = 0;

  if ($index >= $len)
    return false;

  $h = ord($c{$index});

  if ($h <= 0x7F) {
    $bytes = 1;
    return $h;
  }
  else if ($h < 0xC2)
    return false;
  else if ($h <= 0xDF && $index < $len - 1) {
    $bytes = 2;
    return ($h & 0x1F) <<  6 | (ord($c{$index + 1}) & 0x3F);
  }
  else if ($h <= 0xEF && $index < $len - 2) {
    $bytes = 3;
    return ($h & 0x0F) << 12 | (ord($c{$index + 1}) & 0x3F) << 6
                             | (ord($c{$index + 2}) & 0x3F);
  }          
  else if ($h <= 0xF4 && $index < $len - 3) {
    $bytes = 4;
    return ($h & 0x0F) << 18 | (ord($c{$index + 1}) & 0x3F) << 12
                             | (ord($c{$index + 2}) & 0x3F) << 6
                             | (ord($c{$index + 3}) & 0x3F);
  }
  else
    return false;
}

?>
<?php
$str="我 [wǒ] - (pronoun) I or me 你 [nǐ] - (pronoun) you (second person singular); yourself 他 [tā] - (pronoun) he or him";

$splitPoints;
$indis=0;

for($i=0;$i<strlen($str);$i++){
    if ($str[$i]=='['){
        $splitPoints[$indis]=$i-4;
        $indis++;
    }       
}

for($i=0;$i<$indis-1;$i++){
    $strArray[$i]=substr($str,$splitPoints[$i],($splitPoints[$i+1]-$splitPoints[$i]));

}

$strArray[$i]=substr($str,$splitPoints[$indis-1],(strlen($str)-$splitPoints[$indis-1]));

for($i=0;$i<$indis;$i++){
    echo $strArray[$i]."<br>";
}

?>