提取由某些字符包装的子字符串

时间:2012-05-23 13:04:08

标签: php javascript regex

什么是最佳做法,使用正则表达式选择一对分隔符之间的内容,不包括 PHP JS 中的分隔符?

aassssd [dddd] fff ffff (delimiter=[..])   output -> dddd
aassssd QddddQ fff ffff (delimiter=Q)      output -> dddd
aassssd RddddQ fff ffff (delimiters=R...Q) output -> dddd
aassssd "dddd" fff ffff (delimiter=")      output -> dddd

关注的是排除分隔符,选择整体相对容易:

/\"[^"]\"/ //for  line four

最好是解决方案返回缩放器。理想的答案仅使用RegEx,可以在http://regexpal.com/

中进行测试

2 个答案:

答案 0 :(得分:1)

我会使用非贪婪的.*?来捕获截至结束分隔符的所有内容:

$str = 'aassssd QddddQ fff ffff';
preg_match_all('/[Q](.*?)[Q]/', $str, $out, PREG_PATTERN_ORDER);
var_dump($out); 

产生:

Array
(
    [0] => Array
        (
            [0] => QddddQ
        )

    [1] => Array
        (
            [0] => dddd
        )

)

您需要转义[]分隔符:/[\[](.*?)[\]]/

这使用单个捕获组(.*?),因此您需要的输出位于输出数组中的位置1。

答案 1 :(得分:0)

aassssd [dddd] fff ffff (delimiter=[..])   output -> dddd

PHP的RegEx:

(?<=\[).*?(?=\])

RegEx for JS(也适用于PHP):

[^\[]*?(?=\])