2017-10-09 10 views
0

 のすべてのスペースに、Fig. space digit/s and dotのあとに続けて入力します。 。たとえば、文字列は、私はそれを交換したいFig. 1. sasasa Fig. 34. 345 dffdfd etc. dsdsある場合:。php正規表現の後ろに数字とドットが続くスペースを見つけよう

  1.   sasasa図 345 dffdfdなどdsds

regexで行う方法はありますか?私は正規表現/(Fig\.\s)(\d+)(\\.)(\s+)/を試しましたが、それはFig.の後ろにスペースが続き、その後にドットとスペースが続く数字が続きますが、パターンが先行するスペースだけが必要です。これに関するあなたの助け/ヒントを感謝します。ありがとう。

PS:私がこれをしたい理由は、ドットとスペースで終わる文を分割しようとしていることです。しかし、いくつかの文章では、いくつかの単語と数字の後ろにドットとスペース(例えばFig. 1.またはMr. etc)があるので、それらのドットとスペースを に置き換えて、文章が正しく分割されるようにします。

+0

もう1つ例を挙げてください。使用している関連コードを投稿してください。 –

+0

「345 dffdfd'と一致しないのはなぜですか?それ以外の場合は、単に_Find_'(?:(?!\ A)\ G |(図))([\ d。] *)[] '、_Replace_' $ 1 $ 2   ' – sln

答えて

1

これは、右行うためのトリッキーな正規表現です。

これは、一致した件名と一致します。

グローバルに見つける:(?:(?!\A)\G|(Fig))([\d.]*)(?<=[ .])[ ]
置き換え:$1$2&nbsp;

https://regex101.com/r/91hgVD/3

コメント

(?: 
     (?! \A)    # Not Begin of String 
     \G     # \G anchor, start where last left off 
    |      # or 
          # Reset's \G 
     (Fig)    # (1), Fig 
) 
([\d.]*)   # (2), Optional digits or dots 
(?<= [ .])   # Must be a dot or space behind 
[ ]     # space 

注 -は([\d.]*)(?<=[ .])

の間に起こって少し 魔法があります

オプションの[\ d。]は数字とドットを消費しますが、
ですが、(? < = [。])は、スペースの前にドットが必要です。またはスペースが必要です。
たとえば、Fig <space>と一致しません。

+0

これも働いた。簡潔にするために、上記の答えを受け入れましたが、説明のためのあなたの答えに本当に感謝します。私はupvotedしたが、私は15プラスのrepスコアを取得した後にのみ表示されます。ありがとうございます。 –

+0

これは、図だけでなく、St.さんのすべてのケースで完璧に機能しました。これまでの単語の後ろに、私はあなたの正規表現を繰り返しました。等)。この正規表現は私の問題を完全に解決しました!私は今この答えを受け入れています。ご協力いただきありがとうございます。 –

+0

@KrishnaBasada - そうですね、それらを交互に組み合わせることができます。ちょうど 'Fig'の代わりにあなたが望むようにいくつでも追加することができます(?:図| St | Ms | Mrs | Mr)'など。 – sln

0

は、この例から、正規表現とpreg_replace_callback()機能を試してみてください:

$str ='Fig. 1. sasasa Fig. 34. 345 dffdfd etc. dsds'; 
$str = preg_replace_callback('/(Fig\.)[ ]([0-9]+[\.]{1})[ ]*/i', function($m){ 
    return str_ireplace(' ', '&nbsp;', $m[0]); 
}, $str); 

echo $str; // Fig.&nbsp;1.&nbsp;sasasa Fig.&nbsp;34.&nbsp;345 dffdfd etc. dsds 

それとも、ここから:

$str ='Fig. 1. sasasa Fig. 34. 345 dffdfd etc. dsds'; 
$str = preg_replace_callback('/(Fig\.)[ ]([0-9]+[\.]{1})[ ]*/i', function($m){ 
    return str_ireplace([$m[1].' ', $m[2]], [$m[1].'&nbsp;', $m[2].'&nbsp;'], $m[0]); 
}, $str); 

echo $str; // Fig.&nbsp;1.&nbsp; sasasa Fig.&nbsp;34.&nbsp; 345 dffdfd etc. dsds 
+0

私はとても素早く答えを得たと信じられない! CoursesWebに感謝します。私は正規表現を使いこなすのが得意ではありませんが、私はあなたが私を助けてくれることをとてもうれしく思っています。再度、感謝します! –

関連する問題