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


Extracting a substring that is wrapped by some characters

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/中进行测试

我会使用非贪婪.*?,它捕获所有内容直到结束分隔符:

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

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

PHP 正则表达式:

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

正则表达式 for JS(也适用于 PHP):

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