Википедия ссылки на регулярные выражения в PHP - PullRequest
1 голос
/ 13 ноября 2010

Как я могу нарисовать только слова из [[words]] в массив?

[[旭川 市 | 旭川]] (文化) - [[ア イ ヌ]] 文化 、 [[旭川 市 旭 山山 |

Я пытался \[\[.*]], но это не сработало, возможно, потому что .* только для английских строк ..

Ответы [ 4 ]

2 голосов
/ 13 ноября 2010
preg_match_all('/\[\[(.+?)\]\]/u',$str,$matches);
var_dump($matches);
0 голосов
/ 20 декабря 2010

Одна проблема заключается в том, что вы используете жадный подстановочный знак: \[\[.*]] будет соответствовать от первого [[ до последнего ]], включая любые промежуточные ]].

Большинство движков регулярных выражений теперь также включают nongreedy подстановочный знак, обычно *?, так что \[\[.*?]] будет соответствовать только одному викилинку за раз.

0 голосов
/ 13 ноября 2010

Вы можете сначала кодировать Unicode:

[旭川市旭山動物園|旭山動物園]]な&#12393l]
0 голосов
/ 13 ноября 2010

Вам нужно поставить обратную косую черту с обеих сторон, все квадратные скобки должны быть экранированы.

Это сработало в Python, возможно, потребуется модификация для PHP:


>>> re.compile('\[\[(.*?)\]\]')
<_sre.SRE_Pattern object at 0xb747ebf0>
>>> r=_
>>> r.search(text)
<_sre.SRE_Match object at 0xb7469560>
>>> r.findall(text)
['\xe6\x97\xad\xe5\xb7\x9d\xe5\xb8\x82|\xe6\x97\xad\xe5\xb7\x9d', '\xe3\x82\xa2\xe3\x82\xa4\xe3\x83\x8c', '\xe6\x97\xad\xe5\xb7\x9d\xe5\xb8\x82\xe6\x97\xad\xe5\xb1\xb1\xe5\x8b\x95\xe7\x89\xa9\xe5\x9c\x92|\xe6\x97\xad\xe5\xb1\xb1\xe5\x8b\x95\xe7\x89\xa9\xe5\x9c\x92']

Хм, возможно яЯ ошибся из-за необходимости прятаться от квадратных скобок, оказалось, что в Python это не было необходимо.

...