2016-09-14 23 views
0

私はRegexを使用して、特定の文字列を含むテキスト内の全文をマッチさせます。文章の終わりに句読点がある限り、これはうまくいきます。ただし、文章が句読点なしでテキストの最後にある場合は機能しません。正規表現とテキストの末尾まで

これは私の現在の式である:これは文字列と文である

:用

[^.?!]*(?<=[.?\s!])string(?=[\s.?!])[^.?!]*[.?!] 

作品。より多くのテキスト。

詳細テキスト:

は動作しません。これは、 文字列

との文が意図したように、この言葉を作るための方法はありますか?私は "テキストの終わり"の文字クラスを見つけることができません。

答えて

0

テキストの終わりは、文字クラスではなくアンカー$と一致します。

あなたが対処する必要がある2つの別々の問題があります:(1)文が文字列直後に終了し、及び(2)の文は、いつか文字列後であるが、無文の終りの句読点で終わるを。

これを行うには、の後にマッチする必要がありますが、文字列の末尾に一致するアンカーです。これは、(オプションの)文末の句読点を認識した後で、続く文字列のすべてが一致する必要があるため、文字列の終わりのアンカーが一致することを意味します。

マイ変更:あなたの元の正規表現でstring後にすべてのものを取り、(?:...)?で、それを囲む - (?:...)は「非思い出した」グループ、および?は、グループ全体をオプションにいます。文字列の末尾を固定するには、$に従います。 、?が作る再び、(?:...)は「非思い出し」グループを作ることである -

は、そのオプションのグループの中で、あなたはまた、簡単な[.?!](?:[.?!].*)?とを交換することにより、自身がオプションの終りの文を作成する必要がありますグループのオプション - そして.*は、文の終わりが見つかった後にあなたが望むだけ一致させることができます。

[^.?!]*(?<=[.?\s!])string(?:(?=[\s.?!])[^.?!]*(?:[.?!].*)?)?$ 
0

テキストの終わりのシンボルは$です(テキストの開始記号は必要な場合は^です)。

$を句読点リストに追加するだけで、あなたが探しているものを得ることはできません(例:[.?!$])。それは代替選択肢としてより良い作品を見つけるでしょう:([.?!]|$)

0

あなたの正規表現はあなたが達成したいと思うほど複雑すぎます。ただそれは、開始、終了と任意の非alphanum区切り文字に一致します

"\bstring\b" 

を使用するだけで単語に一致するように

それは次のように動作します:

string is at the start 
this is the end string 
this is a string. 
stringing won't match (you don't want a match here) 
0

あなたが使用しての詳細については、問題の言語を追加する必要があります。ここで

はJavaScriptを使用して私の例である:

var reg = /^([\w\s\.]*)string([\w\s\.]*)$/; 
 

 
console.log(reg.test('This is a sentence with string. More text.')); 
 

 
console.log(reg.test('More text. This is a sentence with string')); 
 

 
console.log(reg.test('string'))

注:

*:0回以上一致します。

? :ゼロまたは1回のマッチ。

+:1回以上マッチします。

*を変更することはできますか?または+定義が必要な場合は+を選択します。

関連する問題