自定义正则表达式 [关闭]

Posted

技术标签:

【中文标题】自定义正则表达式 [关闭]【英文标题】:Custom Regular Expressions [closed] 【发布时间】:2013-03-24 19:03:58 【问题描述】:

如何使用正则表达式来分隔

BCT34385Z0000N07518Z
BCT34395Z0000N07518Z

转换成BCT343 格式?我正在使用这个 magento 将 2 种类型的序列号(即BCT34385Z0000N07518ZBCT34395Z0000N07518Z)分解为正则表达式,以识别前 6 个字符,即BCT343

【问题讨论】:

什么是 BCT343 格式?你期望什么输出?你试过什么? 你想只抓取前 6 个字符吗? 如果有,请给我们一个格式规范的链接。如果不是,你至少应该解释一下那个东西的结构。否则我们怎么知道你的标准是什么? 那为什么不直接substr呢?喜欢$value = substr("BCT34385Z0000N07518Z", 0, 6); @danny - 然后建议这样说。我们并不擅长读懂人心。只需拨打两个substr() 电话。另外,我们在说什么语言? 【参考方案1】:

这是非常糟糕的做法,但因为您要求这样做:

$str = 'BCT34385Z0000N07518Z';
preg_match('/^(.6)(.*?)$/', $str, $result);

echo $result[1]; // 'BCT343'
echo $result[2]; // '85Z0000N07518Z'

或者如果你想要一个 if 语句:

$str = ...;

if (preg_match('/^BCT343/', $str)) 
    // yes!

【讨论】:

使用正则表达式可以得到2个结果吗? @danny 我使用 1 个正则表达式并得到 2 个结果?【参考方案2】:

如果您需要将这些字符串分成两部分(前六个字符和其余部分),则根本不需要正则表达式。只需substr 即可:

<?php
    $str1 = substr("BCT34385Z0000N07518Z", 0, 6); // BCT343
    $str2 = substr("BCT34385Z0000N07518Z", 6); // 85Z0000N07518Z
?>

如果您想使用正则表达式执行此操作,您应该设置两个捕获组,一个用于前六个字符,另一个用于字符串的其余部分。正则表达式如下所示:

/^(.6)(.*)$/

/^                // Start of input
(                 // Start capture group 1
  .               // Any charactger
  6             // Repeated exactly 6 times
)                 // End of capture group 1
(                 // Start capture group 1
  .               // Any character
  *               // Repeated 0 or more times
)                 // End of capture group 2
$/                // End of input

您应该使用preg_match() 来使用它。请记住,每个捕获组都将位于匹配数组的位置。请参阅RegExr 中的正则表达式示例。

【讨论】:

需要正则表达式格式。我不能在 magento 上使用它,因为它期望在正则表达式中

以上是关于自定义正则表达式 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

向自定义正则表达式添加动态错误消息

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串

jquery.validation自定义正则表达式验证

干货 | Logstash自定义正则表达式ETL实战

干货 | Logstash自定义正则表达式ETL实战

正则表达式:自定义函数应用