php正则表达式方括号和逗号

时间:2015-11-19 08:42:54

标签: php regex preg-match-all

我想在下面的字符串中的方括号和逗号中捕获文本。

function AddRecordWithFormCollection(url, callback) {

$.post("/api/Person/AddRecord",JSON.stringify(url) , function (data, status) {
    if (status == "success") {
        hidePreloader();
        unloadDiv("div_operation");
        BindTable();

       //AddRowTable(data, obj.name, obj.lastname, obj.age);
        return callback(data);

    } else {
        alert("Error in Method [AddRecord]");
        hidePreloader();

    }
});

我有方括号的正则表达式

$_['text_1']      = 'text_2 %d to %d of %d (%d text)';

但需要两个正则表达式

  1. 文本_1
  2. text_2%d%d%d(%d文字)

1 个答案:

答案 0 :(得分:2)

您的"/\[[^\]]*\]/"仅匹配[.[.[..]等子字符串。

您可以使用

轻松获取值
(?|\['([^][]*)']|'([^'\\]*(?:\\.[^'\\]*)*)')

请参阅regex demo,您的值将在第1组中。

PHP demo

$re = "/(?|\\['([^][]*)']|'([^'\\\\]*(?:\\\\.[^'\\\\])*)')/"; 
$str = "\$_['text_1']      = 'text_2 %d to %d of %d (%d text)';"; 
preg_match_all($re, $str, $matches);
print_r($matches[1]);

正则表达式包含2个备选项,其中2个捕获组具有索引1,因为使用了分支重置分组(?|..|..)。 2个替代方案匹配:

  • \['([^][]*)'] - 一个文字[',后面跟着][以外的0个或多个字符,最多']
  • '([^'\\]*(?:\\.[^'\\]*)*)') - 单引号内的任何子字符串,可能包含任何转义序列。

或者更安全,也允许第一组内的任何[](例如,如果您有$_['P[O]ST'],我猜这不太可能):

(?|\['([^']*(?:'(?!])[^']*)*)'\]|'([^'\\]*(?:\\.[^'\\]*)*)')

请参阅another demo