Php 如何在文本中组合单词的分隔?

Php 如何在文本中组合单词的分隔?,php,regex,Php,Regex,我有简单的文字: $text = "БАДРЎ(Й) (ي(بدرو он ки рўи нозебу хунук до- рад, бадафт, безеб, бадбашара; муќоб. Тез-тез зур - зур. ОБАНДОМ آباندام маљ. обпайкар, нозукан- дом, латифбадан. FБАФКАН آبافكن муњаррики обафкан, даст- гоњи обпошї."; 只得到这个结果: БАББПЎ(Й)(

我有简单的文字:

$text = "БАДРЎ(Й) (ي(بدرو он ки рўи нозебу хунук до- рад, бадафт, безеб, бадбашара; муќоб. Тез-тез зур - зур. ОБАНДОМ آباندام маљ. обпайкар, нозукан- дом, латифбадан. FБАФКАН آبافكن муњаррики обафкан, даст- гоњи обпошї."; 只得到这个结果:

БАББПЎ(Й)(ي(1576年)在1576年(1576年)的一个州(1576年)的一个州(1576年)的州(1576年)的州(1576年)的州(州)的州(州)的州(州)的州(州)的州(州)的州(州(州)的州(州)的州(州)的州(州)的州(州(州)的州)的州(州)的州(州)的州(州(州)的州)的州(州(州)的州(州)的州(州)的州(州(州)的州)的州(州(州)的州(州)的州(州)的)的州(州)的州(州(州(州)的州)的州(州(州)的州)的)的州(州(州)的州(州(州)的州(州(州(州)的州)的)的州(州)的州(FБАФааааа。FБАФАааааааааааааа,аааааа

无法组合这些词:

ззаа-аа至зааааа


аааа-аааања至ааааааааања1072

$regex = '~- ~';
$result = preg_replace($regex, '', $string);
我没有能力测试这个,但是你可以把两者结合起来

$regex = '~-(\R| )~';
$result = preg_replace($regex, '', $string);

请尝试以下正则表达式:

preg_replace("/((?<![ ])[-][ \r\n]+)/", '', $text)

preg\u replace(“/(?您需要替换
\R
或空格,并添加单词边界(
\b
)。最后,由于您现在处理的是单词,因此需要添加空格,以便引擎考虑UTF-8

<?php
$text = "БАДРЎ(Й) (ي(بدرو он ки рўи нозебу хунук до-
рад, бадафт, безеб, бадбашара; муќоб. Тез-тез зур - зур.
ОБАНДОМ آباندام маљ. обпайкар, нозукан- дом, латифбадан.
FБАФКАН آبافكن муњаррики обафкан, даст- гоњи обпошї.";
$regex = '/\b-(\R| )\b/u';
$result = preg_replace($regex, '', $text);
echo $result;
我建议使用

$result = preg_replace('~\b-(?:\R|\h)\b~u', '', $string);

详细信息

  • \b
    -单词边界(当前位置前面必须有单词字符
  • -
    -连字符
  • (?:\R |\h)
    -换行符序列(
    \R
    )或(
    |
    )任何水平空白(
    \h
  • \b
    -单词边界(当前位置右侧必须有一个单词字符)
:

输出:

БАДРЎ(Й) (ي(بدرو он ки рўи нозебу хунук дорад, бадафт, безеб, бадбашара; муќоб. Тез-тез зур - зур.
ОБАНДОМ آباندام маљ. обпайкар, нозукандом, латифбадан.
FБАФКАН آبافكن муњаррики обафкан, дастгоњи обпошї.

它可以工作,但有点不正确。您不需要删除“-"简而言之:
谢谢大家的回答。哪种响应代码工作得更快?我希望进行一次比较性的回顾。我宁愿担心这种情况下的正则表达式精度,而不是速度。是的,正如@WiktorStribiżew建议的那样,制作一些测试用例并在它们上运行所有正则表达式,寻找哪个更精确。只有你才能工作@Wiktor Stribiżew'answer and answer'@ishegg'非常感谢您的回答,但您需要将这个单词组合为
$string = "БАДРЎ(Й) (ي(بدرو он ки рўи нозебу хунук до-
рад, бадафт, безеб, бадбашара; муќоб. Тез-тез зур - зур.
ОБАНДОМ آباندام маљ. обпайкар, нозукан- дом, латифбадан.
FБАФКАН آبافكن муњаррики обафкан, даст- гоњи обпошї.";
$result = preg_replace('~\b-(?:\R|\h)\b~u', '', $string);
echo $result;
БАДРЎ(Й) (ي(بدرو он ки рўи нозебу хунук дорад, бадафт, безеб, бадбашара; муќоб. Тез-тез зур - зур.
ОБАНДОМ آباندام маљ. обпайкар, нозукандом, латифбадан.
FБАФКАН آبافكن муњаррики обафкан, дастгоњи обпошї.