PHP中等价于JavaScript的字符串分割方法

4

我正在使用JavaScript处理这个:

<script type="text/javascript">
    var sURL = "http://itunes.apple.com/us/app/accenture-application-for/id415321306?uo=2&mt=8&uo=2";
    splitURL = sURL.split('/');
    var appID = splitURL[splitURL.length - 1].match(/[0-9]*[0-9]/)[0];
    document.write('<br /><strong>Link Lookup:</strong> <a href="http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsLookup?id=' + appID + '&country=es" >Lookup</a><br />');
</script>

这个脚本使用数字ID并给出415321306。所以我的问题是如何使用PHP实现相同的功能。最好的问候。
6个回答

12
使用PHP的explode()函数代替.split()。
splitURL = sURL.split('/');  //JavaScript

变成

$splitURL = explode('/', $sURL);  //PHP

可以使用preg_match()代替.match()。
$appID = preg_match("[0-9]*[0-9]", $splitURL);

我对你对字符串长度的处理有点不太清楚,但是你可以使用 substr() 在php中获取子字符串。

你的 $appID 将是一个整数,它可以是0或1 preg_match - KJYe.Name
谢谢,@jnpcl - 我修正了拼写错误。@kjy112,我只是重复了 @m4k00 使用的正则表达式。 - Surreal Dreams

5

谁需要正则表达式?


<?php
    $sURL = "http://itunes.apple.com/us/app/accenture-application-for/id415321306?uo=2&mt=8&uo=2";
    $appID = str_replace('id','',basename(parse_url($sURL, PHP_URL_PATH)));
    echo $appID; // output: 415321306
?>

3
preg_match("/([0-9]+)/",$url,$matches);
print_r($matches);

1
Javascript split也可以用于将字符串转换为字符数组(空参数),并且第一个参数可以是RegExp。
/*

Example 1

This can be done with php function str_split();

*/

var str = "Hello World!"

str.split('');

H,e,l,l,o, ,W,o,r,l,d,!

/*

Example 1

This can be done with php function preg_split();

*/

var str = " \u00a0\n\r\t\f\u000b\u200b";

str.split('');

, , , , ,,,​

从Ecma-262中返回一个数组对象,其中存储了将此对象转换为字符串后的子字符串。这些子字符串是通过从左到右搜索分隔符来确定的;这些出现在分隔符中的字符不是返回数组中任何子字符串的一部分,而是用于分割字符串值。分隔符的值可以是任意长度的字符串,也可以是RegExp对象(即其[[Class]]内部属性为"RegExp"的对象;请参见15.10)。分隔符的值可以是空字符串、空正则表达式或可以匹配空字符串的正则表达式。在这种情况下,分隔符不匹配输入字符串开头或结尾的空子字符串,也不匹配前一个分隔符匹配的空子字符串的结尾。(例如,如果分隔符是空字符串,则字符串被拆分成单个字符;结果数组的长度等于字符串的长度,并且每个子字符串包含一个字符。)如果分隔符是一个正则表达式,则仅考虑该字符串在给定位置的第一个匹配项,即使回溯可能会产生一个非空子字符串匹配项在那个位置。(例如,“ab”.split(/a*?/)计算为数组["a","b"],而“ab”.split(/a*/)计算为数组["","b"]。)如果此对象为空字符串(或转换为空字符串),则结果取决于分隔符是否可以匹配空字符串。如果可以,则结果数组不包含任何元素。否则,结果数组包含一个元素,即空字符串。如果分隔符是包含捕获括号的正则表达式,则每次匹配分隔符时,捕获括号的结果(包括任何未定义的结果)都将插入到输出数组中。


0

Javascript对应于PHP的函数(http://kevin.vanzonneveld.net)

<script>
  function preg_split (pattern, subject, limit, flags) {
        // http://kevin.vanzonneveld.net
        // + original by: Marco Marchi??
        // * example 1: preg_split(/[\s,]+/, 'hypertext language, programming');
        // * returns 1: ['hypertext', 'language', 'programming']
        // * example 2: preg_split('//', 'string', -1, 'PREG_SPLIT_NO_EMPTY');
        // * returns 2: ['s', 't', 'r', 'i', 'n', 'g']
        // * example 3: var str = 'hypertext language programming';
        // * example 3: preg_split('/ /', str, -1, 'PREG_SPLIT_OFFSET_CAPTURE');
        // * returns 3: [['hypertext', 0], ['language', 10], ['programming', 19]]
        // * example 4: preg_split('/( )/', '1 2 3 4 5 6 7 8', 4, 'PREG_SPLIT_DELIM_CAPTURE');
        // * returns 4: ['1', ' ', '2', ' ', '3', ' ', '4 5 6 7 8']
        // * example 5: preg_split('/( )/', '1 2 3 4 5 6 7 8', 4, (2 | 4));
        // * returns 5: [['1', 0], [' ', 1], ['2', 2], [' ', 3], ['3', 4], [' ', 5], ['4 5 6 7 8', 6]]
    
        limit = limit || 0; flags = flags || ''; // Limit and flags are optional
    
        var result, ret=[], index=0, i = 0,
            noEmpty = false, delim = false, offset = false,
            OPTS = {}, optTemp = 0,
            regexpBody = /^\/(.*)\/\w*$/.exec(pattern.toString())[1],
            regexpFlags = /^\/.*\/(\w*)$/.exec(pattern.toString())[1];
            // Non-global regexp causes an infinite loop when executing the while,
            // so if it's not global, copy the regexp and add the "g" modifier.
            pattern = pattern.global && typeof pattern !== 'string' ? pattern :
                new RegExp(regexpBody, regexpFlags+(regexpFlags.indexOf('g') !==-1 ? '' :'g'));
    
        OPTS = {
            'PREG_SPLIT_NO_EMPTY': 1,
            'PREG_SPLIT_DELIM_CAPTURE': 2,
            'PREG_SPLIT_OFFSET_CAPTURE': 4
        };
        if (typeof flags !== 'number') { // Allow for a single string or an array of string flags
            flags = [].concat(flags);
            for (i=0; i < flags.length; i++) {
                // Resolve string input to bitwise e.g. 'PREG_SPLIT_OFFSET_CAPTURE' becomes 4
                if (OPTS[flags[i]]) {
                    optTemp = optTemp | OPTS[flags[i]];
                }
            }
            flags = optTemp;
        }
        noEmpty = flags & OPTS.PREG_SPLIT_NO_EMPTY;
        delim = flags & OPTS.PREG_SPLIT_DELIM_CAPTURE;
        offset = flags & OPTS.PREG_SPLIT_OFFSET_CAPTURE;
    
        var _filter = function(str, strindex) {
            // If the match is empty and the PREG_SPLIT_NO_EMPTY flag is set don't add it
            if (noEmpty && !str.length) {return;}
            // If the PREG_SPLIT_OFFSET_CAPTURE flag is set
            //      transform the match into an array and add the index at position 1
            if (offset) {str = [str, strindex];}
            ret.push(str);
        };
        // Special case for empty regexp
        if (!regexpBody){
            result=subject.split('');
            for (i=0; i < result.length; i++) {
                _filter(result[i], i);
            }
            return ret;
        }
        // Exec the pattern and get the result
        while (result = pattern.exec(subject)) {
            // Stop if the limit is 1
            if (limit === 1) {break;}
            // Take the correct portion of the string and filter the match
            _filter(subject.slice(index, result.index), index);
            index = result.index+result[0].length;
            // If the PREG_SPLIT_DELIM_CAPTURE flag is set, every capture match must be included in the results array
            if (delim) {
                // Convert the regexp result into a normal array
                var resarr = Array.prototype.slice.call(result);
                for (i = 1; i < resarr.length; i++) {
                    if (result[i] !== undefined) {
                        _filter(result[i], result.index+result[0].indexOf(result[i]));
                    }
                }
            }
            limit--;
        }
        // Filter last match
        _filter(subject.slice(index, subject.length), index);
        return ret;
    }
   </script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接