1

単一の文字列の間にあるコンテンツを取得したいのですが、コンテンツが空の場合、正規表現は失敗します...

<?PHP
$string = "
blaat = 'Some string with an escaped \' quote'; // some comment.
empty1 = ''; // omg! an empty string!
empty2 = ''; // omg! an empty string!
";

preg_match_all( '/(?<not>\'.*?[^\\\]\')/ims', $string, $match );

echo '<pre>';
print_r( $match['not'] );
echo '</pre>';
?>

これにより、次の出力が得られます。

Array
(
    [0] => 'Some string with an escaped \' quote'
    [1] => ''; // omg! an empty string!
empty2 = '
)

この問題は次の正規表現で修正できることを知っていますが、すべての例外の修正ではなく、真の解決策を探していると思いました...

preg_match_all( '/((\'\')|(?<not>\'(.*?[^\\\])?\'))/ims', $string, $match );
4

2 に答える 2

1
<?php
$string = "
blaat = 'Some string with an escaped \' quote'; // some comment.
empty1 = ''; // omg! an empty string!
empty2 = ''; // omg! an empty string!
not_empty = 'Another non empty with \' quote'; 

";

$parts = preg_split("/[^']*'(.*)'.*|[^']+/", $string, 0, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

print_r($parts);

出力します

配列
((
    [0]=>エスケープされた\'引用符のある文字列
    [1] =>\'引用符で空でない別の
)。
于 2012-08-26T16:17:08.157 に答える
0
<?PHP
$string = "
blaat = 'Some string with an escaped \' quote'; // some comment.
empty1 = ''; // omg! an empty string!
empty2 = ''; // omg! an empty string!
";

preg_match_all( '/(?<not>
    \'          #match first quote mark
    .*?         #match all characters, ungreedy
    (?<!\\\)    #use a negative lookbehind assertion
    \'
    )
/ixms', $string, $match );

echo '<pre>';
print_r( $match['not'] );
echo '</pre>';

?>

私のために働いた。また、/x freespacing モードを追加して、少しスペースを空けて読みやすくしました。

于 2012-08-26T23:55:03.553 に答える