2

デバイス名 say を格納する変数があります$dev_to_connect = "XYZ keyboard"。パターン マッチングの一部として正規表現に含めたい。使ってみ\Q..\Eました。しかし、役に立たないことがわかりました。

私が使用している正規表現は'Dev:(\d)\r\n\tBdaddr:(..):(..):(..):(..):(..):(..)\r\n\tName:\Q$device_to_connect\E'

\Q$device_to_connect\E正規表現の部分を変数の元の値と一致させたい。

4

3 に答える 3

3

一重引用符は補間しません。二重引用符を使用できますが、多くのエスケープが必要になります。qr//まさにこの目的のために設計されています。

qr/Dev:(\d)...Name:\Q$device_to_connect\E/
于 2012-04-19T05:25:37.510 に答える
0

ドキュメント内でダブル ワードを検索する必要があるとします。これを行う方法は次のとおりです。

\b(\w+)\s+\1\b

そして、ここに解剖学があります:

<!--
\b(\w+)\s+\1\b

Options: ^ and $ match at line breaks

Assert position at a word boundary «\b»
Match the regular expression below and capture its match into backreference number 1 «(\w+)»
   Match a single character that is a “word character” (letters, digits, and underscores) «\w+»
      Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
Match a single character that is a “whitespace character” (spaces, tabs, and line breaks) «\s+»
   Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
Match the same text as most recently matched by capturing group number 1 «\1»
Assert position at a word boundary «\b»
-->

グループ番号を呼び出すことは、パターン内の前のグループを呼び出す/含める唯一の方法です。この半分を願っています。こちらを参考にご覧ください。

于 2012-04-19T04:06:34.743 に答える
0

変数名が混同されていると思います。$dev_to_connect を定義しますが、正規表現で $device_to_connect を参照します。正規表現で変数を使用することが簡単であることを修正すると、次のようになります。

$var = 'foo';
if ($_ =~ /$var/) {
  print "Got '$var'!\n";
}

これは、機能するスクリプトの 1 つの抜粋です。

if ($ctlpt =~ /$owner/) {
  ($opt_i) && print "$prog: INFO: $psd is on $ctlpt.\n";
} else {
  print "$prog: WARNING: $psd is on $ctlpt, and not on $owner.\n";
}
于 2012-04-19T04:03:50.733 に答える