PHP相当于JavaScript的字符串拆分方法

时间:2011-02-18 23:09:05

标签: php javascript

我在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 个答案:

答案 0 :(得分:11)

使用PHP的explode()函数代替.split()。

splitURL = sURL.split('/');  //JavaScript

变为

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

使用preg_match()代替.match()。

$appID = preg_match("[0-9]*[0-9]", $splitURL);

我对你在字符串长度上所做的事情有点不清楚,但是你可以在php中使用substr()获得子字符串。

答案 1 :(得分: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
?>

答案 2 :(得分:3)

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

答案 3 :(得分:1)

答案 4 :(得分: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   返回一个Array对象,结果的子字符串   已存储将此对象转换为String的操作。该   通过从左到右搜索确定子字符串   分离器的出现;这些事件不属于任何事件   返回数组中的substring,但用于分割String   值。 separator的值可以是任何长度的String或者它   可以是RegExp对象(即,[[Class]]内部的对象   属性是“RegExp”;见15.10)。分隔符的值可以是   空字符串,空正则表达式或正则表达式   可以匹配空字符串。在这种情况下,分隔符不会   匹配输入开头或结尾的空子字符串   字符串,也不匹配末尾的空子字符串   上一个分隔符匹配。 (例如,如果分隔符是   空字符串,字符串被分成单个字符;该   结果数组的长度等于String的长度,   每个子字符串包含一个字符。)如果separator是a   正则表达式,只有在给定位置的第一个匹配   即使回溯可以产生一个,也会考虑这个字符串   该位置的非空子字符串匹配。 (例如,   “ab”.split(/ a *?/)计算数组[“a”,“b”],而   “ab”.split(/ a * /)计算数组[“”,“b”]。)如果这个对象   是(或转换为)空String,结果取决于是否   separator可以匹配空String。如果可以,结果数组   不包含任何元素。否则,结果数组包含一个   element,这是空String。如果分隔符是常规的   包含捕获括号的表达式,然后每次   separator与结果匹配(包括任何未定义的结果)   将捕获括号拼接到输出数组中。

答案 5 :(得分:0)

与php等效的javascript函数 (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>