私はこのように少し見える文字列を持っています
1: u:mads g:folk 2: g:andre u:jens u:joren
私が必要としているのは、たとえば u:jens とその後の数字 (1 または 2) を取得する方法 (正規表現で推測しています) です。
PHPでこれを行うにはどうすればよいですか(できれば1つの関数のみで)?
これにより、すべての一致が検索されます。最初のものだけが必要な場合は、preg_match
代わりに使用してください。
<?php
$subject = '1: u:mads g:folk 2: g:andre u:jens u:joren 3: u:jens';
preg_match_all('#(\d+):[^\d]*?u:jens#msi', $subject, $matches);
foreach ($matches[1] as $match) {
var_dump($match);
}
?>
次の正規表現を使用できます。
(\d+):(?!.*\d+:.*).*u:jens
探している数字が最初のキャプチャグループに配置される場所。したがって、PHPを使用している場合:
$matches = array();
$search = '1: u:mads g:folk 2: g:andre u:jens u:joren';
if (preg_match('/(\d+):(?!.*\d+:.*).*u:jens/', $search, $matches)) {
echo 'Found at '.$matches[1]; // Will output "Found at 2"
}
これは文字列を解析し、検索文字列が見つかった数字キーを含む配列を返します。
function whereKey($search, $key) {
$output = array();
preg_match_all('/\d+:[^\d]+/', $search, $matches);
if ($matches[0]) {
foreach ($matches[0] as $k) {
if (strpos($k, $key) !== FALSE) {
$output[] = (int) current(split(':', $k));
}
}
}
return $output;
}
例えば:
whereKey('1: u:mads g:folk 2: g:andre u:jens u:joren', 'u:jens')
...戻ります:
array(1) { [0]=> int(2) }