1

以下に一致させたい場合:

slashdot               <-Hit

"    slashdot    "     <-Hit

"    slashdot          <-Hit

    slashdot    "      <-Hit

"slashdot"             <-Miss

(改行がない場合を含む)どうすればそれを正規表現できますか?

スピーチマークが一致をキャンセルするようにしたいと思いますが、コンテンツとスピーチマークの間に絶対に空白がない場合に限ります.

スピーチマークを検出する方法について、stackoverflow でいくつかのサンプルを見つけました

(?=(?:(?:[^"]*+"){2})*+[^"]*+\z) 

しかし、スペースがある場合でもヒットするように設定するのに問題があります。

すべてのヘルプは非常に高く評価されています。(私はstackoverflowに不慣れで、とても気に入っています!他の人のためにできるだけ多くの質問に答え、聞いたことをすべて学ぼうとしています)


簡単に言えば

slashdot - good
"slashdot" - bad
" slashdot " - good (as there are spaces)
4

1 に答える 1

3

説明

この正規表現は、引用符のない行、または引用符とそのペイロードの間に空白がある行のみを検索します。この式は、スペース以外の最初の文字が存在する場合は引用符であると想定しています。最初の非スペース文字が開始引用符でない場合、行全体が許可されます。

^\s*(?:[^"].*|"\s.*\s"?)\s*(?:$|\r|\n|\Z)

ここに画像の説明を入力

PHP コード例:

入力文字列

slashdot           
"    slashdot    " 
"    multiline 1 slashdot     
    line 2 slashdot    " 
"slashdot bad"        
     "    leading spaces and trailing spaces    " 

コード

<?php
$sourcestring="your source string";
preg_match_all('/^(?:[^"].*|"\s[^"]*\s")/imx',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>

マッチ

$matches Array:
(
    [0] => Array
        (
        [0] => slashdot           
        [1] => "    slashdot    " 
        [2] => "    multiline 1 slashdot     
        [3] =>     line 2 slashdot    " 
        [4] =>      "    leading spaces and trailing spaces    " 
         )

)
于 2013-06-25T04:55:04.410 に答える