【问题标题】:Split a string with <span> using preg_split()使用 preg_split() 用 <span> 分割字符串
【发布时间】:2014-02-23 22:56:37
【问题描述】:

我有一个这种格式的刺。

<span class="amount">$25</span>–<span class="amount">$100</span>

我需要做的是把它分成两个字符串。该字符串将保持相同的格式,但价格会发生变化。我尝试使用 str_split() 但由于价格变化,我无法始终知道拆分字符串的字符数。

我想要得到的是这样的。

字符串 1

<span class="amount">$25</span>–

字符串 2

<span class="amount">$100</span>

似乎我发现的最佳选择是使用 preg_split() 但我对正则表达式一无所知,所以我不确定如何格式化表达式。可能还有更好的方法来处理这个问题,我只是不知道。

有人可以帮我格式化正则表达式,或者让我知道拆分该字符串的更好方法。

编辑

感谢@rm-vanda 帮助我弄清楚我不需要为此使用 preg_split。我能够使用explode()拆分字符串。我遇到的问题是因为“-”的编码很奇怪,因此无法正确返回。

【问题讨论】:

  • 尝试正确解析它而不是使用正则表达式 (see this for more info)
  • “我发现最好的选择似乎是使用 preg_split()” - 你需要做更多的研究。见Parsing Html The Cthulhu Way
  • 感谢您提供的参考资料,我认为在 html 上使用正则表达式显然不是一个好主意。但是,目前我不知道我的其他选择是什么。

标签: php regex string string-split


【解决方案1】:

把这个问题翻译成DOM可能会更好:

$html = <<<HTML
<span class="amount">$25</span>–<span class="amount">$100</span>
HTML;

$doc = new DOMDocument;
$doc->loadHTML($html);

foreach ($doc->getElementsByTagName('span') as $span) {
    // do stuff with $span
    // e.g. this is how you would get the outer html
    echo $doc->saveXML($span);
}

【讨论】:

  • 没有。不它不是。 DOM 占用了更多的内存 - 这太简单了,无法证明如此大的开销是合理的。
  • @rm-vanda OP 以后想用它做什么会有所作为;也就是说,在大多数情况下,我发现字符串域对于 HTML 来说是错误的。
  • 你同意,那么 - 如果他只有两个跨度,那么 DOM 不是正确的方法吗?
  • @rm-vanda 当然,如果是这样......在这一点上我们都不知道,不是吗?
  • 不,但列举所有可能性当然是好的。
【解决方案2】:

如果它总是有“-”那么这将是最简单的方法:

$span = explode("-", $spans); 

echo $span[0]; 

echo $span[1]; 

【讨论】:

  • 总是会有一个“-”,所以这个选项似乎可以工作。但是我似乎无法正确理解。它总是返回一个包含整个字符串的数组项。
  • 当我复制+粘贴您的代码时,“-”似乎是其他字符——(例如,ctrl+f 并搜索“-”——以及代码中的“-”不会被击中)只需在您的代码中将其替换为“-”
  • 我尝试了这两种不同的方法,但无法正常工作。 pastebin.com/10DB6iCN
  • 好的,我会尝试看看正在使用的角色是什么,它是在我无法编辑的插件中创建的,所以希望我能弄清楚。
  • 这个字符被称为 EN_DASH,这将解决您的问题,尽管您可以尝试删除一条线。 phpfiddle.org/lite/code/u97-1c3
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多