PHP从字符串中提取特定字符

时间:2018-10-24 08:55:12

标签: php regex

我有波纹管字符串

.progressbar li:before {
        content: counter(step);
        counter-increment: step; 
        position: relative;
        width: 40px;
        height: 40px;
        border: 1px solid #ffffff;
        display: block;
        text-align: center;
        margin: 0 auto 10px auto;
        border-radius: 50%;
        line-height: 40px;
        background-color: #a697a8;
        color: #ffffff;  
        z-index: 1052;
    }

    .progressbar li:after {
        content: '';
        position: absolute;
        width: 100%;
        height: 14px;
        top: 13px;
        left: -50%;
        z-index: 1051;
        background-size: 35px 35px;
        background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);
        background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);
        -webkit-box-shadow: inset 2px 2px 2px 0px rgba(0, 0, 0, 0.2);
        box-shadow: inset 2px 2px 2px 0px rgba(0, 0, 0, 0.2);
        background-color: #a697a8;
    }

,我想从上面的字符串中提取$LINE = TCNU1573105 HDPE HTA108 155 155 000893520918 PAL990 25.2750 MT 28.9750 MT 。实际上会提取PAL990字符串或任何包含PAL的字符串,后跟一些数字,例如PAL222或PAL123

我尝试了很多方法,但没有得到结果。我用过,

PAL990

但是当值在不同位置时,我得到了错误的值。

2 个答案:

答案 0 :(得分:1)

您可以使用

$LINE = "TCNU1573105  HDPE HTA108  155   155  000893520918 PAL990  25.2750 MT  28.9750 MT";
if (preg_match('~\bPAL\d+\b~', $LINE, $res)) {
    echo $res[0]; // => PAL990
}

请参见PHP demothis regex demo

详细信息

  • \b-单词边界
  • PAL-一个PAL子字符串
  • \d+-1个以上数字
  • \b-单词边界。

preg_match function将返回第一个匹配项。

请注意,如果您的字符串在连字符/空格之间包含相似的字符串,则您将不再能够依赖单词边界,请使用自定义空格边界,即:

'~(?<!\S)PAL\d+(?!\S)~'

请参见this regex demo

编辑

如果您在PAL和数字之间有一个可选的空格,则可以使用

preg_replace('~.*\b(PAL)\s?(\d+)\b.*~s', '$1$2', $LINE)

请参见this PHP demothis regex demo

或者,将所需的字符串与空格匹配,然后将其删除:

if (preg_match('~\bPAL ?\d+\b~', $LINE, $res)) {
    echo str_replace(" ", "", $res[0]);
}

再见another PHP demo

请注意,?使前面的模式为可选(匹配1或0个匹配项)。

答案 1 :(得分:0)

$string = "123ABC1234 *$%^&abc.";
$newstr = preg_replace('/[^a-zA-Z\']/','',$string);
echo $newstr;

输出:ABCabc