1

使用正则表达式在一对分隔符之间选择内容的最佳实践是什么,不包括PHPJS中的分隔符?

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

解决方案最好返回一个缩放器。一个理想的答案只使用正则表达式,可以在http://regexpal.com/中进行测试

4

2 回答 2

1

我会使用 non-greedy.*?来捕获所有内容,直到结束分隔符:

$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。

于 2012-05-23T13:30:00.460 回答
0
aassssd [dddd] fff ffff (delimiter=[..])   output -> dddd

PHP 的正则表达式:

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

用于 JS 的 RegEx(也适用于 PHP):

[^\[]*?(?=\])
于 2012-11-23T11:58:27.250 回答