1

まず、構文自体はスクリプトの一部ではありませんが、フォーム入力を介して解析されます。したがって、Java コードを指す「既存の」ソリューションは、それ自体は適用されません。

さて、ここで私がしなければならないことは次のとおりです。次のような用語を入力できるようにする必要があります。

「これがあなたの空港で、これがあなたの車です。」'airport' または 'airports' という単語のみが一致するように、入力フィールドに入力します。したがって、「99airport」や「airport99」などは一致しません。そして、私は近くにいます!

(?i).*\bair[port|ports].*

上記をテスト サイトで RegEx として入力すると、次のようになります。

http://www.ocpsoft.org/tutorials/regular-expressions/java-visual-regex-tester/#!;t=123-45-6789%0A9876-5-4321%0A987-65-4321%20(攻撃)%0A987-65-4321%20%0A192-83-7465&r=(%3Fm)%5E(%5Cd%7B3%7D-%3F%5Cd%7B2%7D-%3F%5Cd%7B4%7D)%24&x =見つかった%20良い%20SSN%3A%20%241

実際、'99airport' は、Word Boundary 識別子の使用が開始されたため一致しません\b。ただし、「airport99」も一致しないように、単語の末尾に \b を配置する方法がわかりません。私はいくつかのことを試しましたが、運がありません。理解する必要があるのは、 [] の周りに配置する構文だと思います。

また、何を一致させる必要があるかどうかにあまり注意を払わないでください。これらは単なるランダムな単語です。現在、入力に「airport99」が含まれている場合は一致しますが、解決策を見つけられれば一致しないはずです。

ありがとう!

4

2 に答える 2

2

mather.matches入力文字列内の単語をチェックするために使用しているようです。.*そのため、キーワードの前後が必要です。テキストは入力フィールドからのものであるため、改行記号を一致させる必要はなく、(?s)singleline/dotall 修飾子も必要ありません。

ただし、文字クラス ( [...])グループ ( (...))を間違えています。文字クラスは 1 文字に一致します。たとえば、 、、、、、または[port|ports]のいずれかの 1 文字に一致します。グループを使用して、特定のシンボルのシーケンスを一致させることができます。たとえば、 または のいずれかに一致します。port|s(port|ports)portports

したがって、あなたの場合、使用できます

(?i).*\bairports?\b.*

または - 効率が悪い -

(?i).*\bair(port|ports)\b.*

ジャワでは、String patrn = "(?i).*\\bairports?\\b.*";

于 2015-11-16T14:38:41.400 に答える
1

この式は要件に一致する必要があります。

(?i)\\b(air)?port\\b

"port" と "airport" には一致しますが、"99port"、"port99"、"99airport"、"airport99" には一致しません。

より一般的な表現が必要な場合、これは「air」とその他の (オプションの) 文字で始まる任意の単語に一致する必要がありますが、数字や句読点記号には一致しません。

(?i)\\b(air)?[a-z]*\\b
于 2015-11-16T14:14:47.307 に答える