言って、私はDN文字列、このようなものがある場合:両方OU=Karen
とOU=admin
を持っている唯一のDNを選択する正規表現を作成する方法正規表現でブールAND条件を使用できますか?
OU=Karen,OU=Office,OU=admin,DC=corp,DC=Fabrikam,DC=COM
を?
言って、私はDN文字列、このようなものがある場合:両方OU=Karen
とOU=admin
を持っている唯一のDNを選択する正規表現を作成する方法正規表現でブールAND条件を使用できますか?
OU=Karen,OU=Office,OU=admin,DC=corp,DC=Fabrikam,DC=COM
を?
のようなものを使用することができます
正確な文字列を確認する条件の回数だけ、またはindexOf()
とすることができます。正規表現の必要はありません。
先読みで拡張可能な正規表現(より多くの条件をサポートできるように)が可能かもしれませんが、それはもっとうまくいくとは思っていません。
と同じ文字列でこのタイプのアクションを複数回実行したい場合、文字列にトークンが多数ある場合、文字列の解析とデータ構造の保存を検討することができます。
いいえ、あなたはvi
を使用していない場合を除き:それはこれはしかし、十分に近い、または類似であるかもしれない\&
オペレータ
/(OU=Karen.*OU=admin|ou=admin.*OU=Karen)/
を持っています。
あなたは正規表現を使用する必要がある場合、あなたはあなたが単一の正規表現とすべて、あるいは正規表現を行う必要はありません実現
/OU=Karen.*?OU=admin|OU=admin.*?OU=Karen/
非貪欲な正規表現の場合は – rekire
を使用することができます。
正規表現は入力クラスを捕捉するのには非常に適していますが、完全に固定された2つの文字列がある場合は、タイプのメソッドを使用してから結果をand
だけ使用できます。
正規表現を使用する必要がある場合は、を(文字列ごとに1回)、結果を合計でand
とすることができます。あなたは単一正規表現でそれを行う必要がある場合
、あなたのような何かを試みることができる:
,OU=Karen,.*,OU=admin,|,OU=admin,.*,OU=Karen,
をしかし、あなたは、その後も、これらのスタンザが開始または終了の時に表示されたときに心配する必要がありますライン、およびその他のあらゆる種類のエッジケース(開始または終了のいずれか一方または両方、お互いに隣接して、Karen7
またはadministrator-lesser
のような名前など)が含まれます。それはそうだろうが、高度なenougeの正規表現エンジンで、これは小さな何か(に還元することができ、けれども
^OU=Karen(,[^,]*)*,OU=admin,|
^OU=Karen(,[^,]*)*,OU=admin$|
,OU=Karen(,[^,]*)*,OU=admin,|
,OU=Karen(,[^,]*)*,OU=admin$|
^OU=admin(,[^,]*)*,OU=Karen,|
^OU=admin(,[^,]*)*,OU=Karen$|
,OU=admin(,[^,]*)*,OU=Karen,|
,OU=admin(,[^,]*)*,OU=Karen$
:すべての可能性は、おそらくのような巨大なものになってしまいます可能にするために持っ
すべての前方見通し/バックトラッキングのためにより速くなります)。は、複雑な正規表現なし向上させることができることが
一つの方法は、境界チェックが必要とされないように、少し前に手あなたの文字列をマッサージすることです:
newString = "," + origString.replace (",", ",,") + ","
それはカンマで始まり、終わるようにその内のすべてのコンマが複製されています
:次に,OU=Karen,,OU=Office,,OU=admin,,DC=corp,,DC=Fabrikam,,DC=COM,
あなたがはるかに簡単に確認するだけです0
と、これは前述のすべての潜在的な問題を削除します。
Karen2
などの拡張名が誤って一致しています。両方とも無視 str = "OU=Karen,OU=Office,OU=admin,DC=corp,DC=Fabrikam,DC=COM"
elems[] = str.splitOn(",")
gotKaren = false
gotAdmin = false
for each elem in elems:
if elem = "OU=Karen": gotKaren = true
if elem = "OU=admin": gotAdmin = true
if gotKaren and gotAdmin:
weaveYourMagicHere()
これを:おそらく
(あなたの言語が許すならば)これを行うための最善の方法は、単に何かのように、カンマで文字列を分割し、それらを検討することです彼らが出現する可能性があり、エッジの場合を検出するために必要な正規表現の「体操」をバイパスします。
また、おそらくあなたはこれが全体の文字列に一致、正規表現先読みソリューションです(OU \ =カレン
:-)同等の正規表現よりも読みやすいという利点がありますそれだけで、参照のために、任意の順序で必要な部品が含まれている場合。あなたが設定可能な変数のいくつかの並べ替えにパターンを格納しない場合、私はnhahtdhのソリューション、しかし。
/^(?=.*OU=Karen)(?=.*OU=admin).*$/
^ - line start
(?= - start zero-width positive lookahead
.* - anything or nothing
OU=Karen - literal
) - end zero-width positive lookahead
- place as many positive or negative look-aheads as required
.* - the whole line
$ - line end
こんにちはとスタックオーバーフローへようこそ。これはよく質問に答えるかもしれません - しかし、少しの説明は常に良いアイデアです。 S/O上の初心者のヒープは、あなたから何かを学ぶかもしれません。あなたには明白かもしれないことが、彼らにはないでしょう。 –
説明をありがとう! – ahmd0