【问题标题】:PHP: Compare two string message templatesPHP:比较两个字符串消息模板
【发布时间】:2014-03-14 16:44:56
【问题描述】:

我正在做一个 Bulk sms 项目,在印度的交易路线,你应该向电信运营商注册一个模板。

现在我们如何识别发送相同模板或其他模板的用户?

我做了一些研究并编写了如下代码。

$txt1 = "TXN: <452235585> was Failed. Reference no. <452525222>";
$txt2 = "TXN: 452235585 was Failed. Reference no. 452525222. Geeglobia providing best holiday packages. Check it now";

similar_text(ltrim($txt1, '0123456789'), ltrim($txt2, '0123456789'), $percent);

echo $percent; // Gives 63.694267515924

谁能给个更好的主意?

【问题讨论】:

  • 如果我的问题是正确的,您想知道$txt2 是否以$txt1 开头?
  • 不完全是,第二个应该匹配整个字符串,除了在 括号中的字符串
  • 呃。另一个问题(仍然不确定应该匹配什么)。我现在得到它的方式:检查第二个字符串是否以第一个字符串开头,但忽略那些数字?
  • 它应该忽略尖括号“”中的数据
  • 那不一定是数字?好的,我想现在明白了。

标签: php string-comparison


【解决方案1】:

实际上最方便的方法是使用正则表达式。有两种选择:

1) 不要将第一个字符串指定为字符串,而是指定为正则表达式模式,使用preg_match 进行比较:

$txt1 = '/^TXN: .*? was Failed. Reference no. .*?$/';
$txt2 = "TXN: 452235585 was Failed. Reference no. 452525222. Geeglobia providing best holiday packages. Check it now";

$match = (preg_match($txt1, $txt2) == 1);

2) 将第一个字符串转换为模式,然后如上。

$txt1 = "TXN: <452235585> was Failed. Reference no. <452525222>";
$txt2 = "TXN: 452235585 was Failed. Reference no. 452525222. Geeglobia providing best holiday packages. Check it now";

$convertedTxt1 = '/^' . preg_replace("/(.*?)<.*?>/", "$1.*?", $txt1) . '$/';

$match = (preg_match($convertedTxt1, $txt2) == 1);

(代码 sn-ps 未经测试)

【讨论】:

  • 工作了一下,但$txt2 不应该每次都完全相同。括号内的数据可能每次都发生变化。在这种情况下,如果相同的字符串通过,否则不通过。
  • @RadhakrishnaRayidi 应该以这种方式工作 - 应该忽略那些有角的 barackets 之间的所有内容。如果这不起作用,请将您尝试过的两个字符串提供给我,我会再次调查。
  • String1: TXN: 是 。参考编号。 字符串 2:TXN:452235585 失败。参考编号。 452525222.
  • 是的,非常感谢。我不知道正则表达式。如果你不介意你可以给我一些你曾经看到的网址。如果你这样做,对我很有帮助。谢谢。
  • 这是&lt;29,920/44,900&gt; 中的斜线。要解决此问题,请将以$convertedTxt1= 开头的行中的所有斜杠更改为您不使用的字符或使用反斜杠转义斜杠(因此它变为&lt;29,920\/44,900&gt;)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多